WorksheetsCâu hỏi về SQL Server
Total questions: 79
Worksheet time: 40mins
Trong SQL Server, login được tạo ở cấp độ nào?
Database
Server
Table
Schema
Để cho phép một người dùng truy cập một cơ sở dữ liệu cụ thể, bạn cần:
Chỉ tạo login
Chỉ tạo user
Tạo login và ánh xạ với user trong database
Chỉ cấp quyền SELECT cho bảng
Lệnh nào được dùng để tạo login SQL Server dùng xác thực SQL?
CREATE USER ...
CREATE LOGIN ... WITH PASSWORD = '...'
CREATE ROLE ...
GRANT LOGIN ...
Khi bạn tạo user trong một database mà không chỉ định login, điều gì xảy ra?
SQL Server tự động tạo login trùng tên
User sẽ là contained database user
User không thể đăng nhập vào database
SQL Server báo lỗi ngay lập tức
Khi bạn tạo user trong một database mà không chỉ định tên user, điều gì xảy ra?
SQL Server tự động tạo user trùng tên
User sẽ là contained database user
User không thể đăng nhập vào database
SQL Server báo lỗi ngay lập tức
Lệnh nào dùng để gán user vào một database role có sẵn?
GRANT ROLE ... TO ...
ALTER ROLE ... ADD MEMBER ...
CREATE ROLE ... WITH ...
EXEC sp_addlogin ...
Lệnh nào được dùng để thay đổi mật khẩu cho một login?
ALTER LOGIN ... WITH PASSWORD = '...'
ALTER USER ... WITH PASSWORD = '...'
GRANT PASSWORD ... TO ...
sp_password ...
Nếu muốn cấp quyền SELECT cho một user trên bảng Customers, bạn dùng lệnh:
ALTER USER ... ADD SELECT ON Customers
GRANT SELECT ON Customers TO user_name
CREATE ROLE ... WITH SELECT
EXEC sp_addrolemember 'SELECT', user_name
Để xóa một user ra khỏi database mà không ảnh hưởng login, dùng lệnh:
DROP LOGIN user_name
DROP USER user_name
ALTER LOGIN user_name DISABLE
REVOKE CONNECT FROM user_name
Khi một login được ánh xạ đến nhiều database, nó sẽ:
Dùng cùng một user_id ở tất cả database
Có user riêng biệt trong mỗi database
Không thể đăng nhập nhiều database cùng lúc
Bị giới hạn quyền SELECT mặc định
Khi một login được ánh xạ đến nhiều database, nó sẽ:
Dùng cùng một user_id ở tất cả database
Có user riêng biệt trong mỗi database
Không thể đăng nhập nhiều database cùng lúc
Bị giới hạn quyền SELECT mặc định
Lệnh nào dùng để vô hiệu hóa một login SQL Server?
REVOKE LOGIN ...
ALTER LOGIN ... DISABLE
DROP LOGIN ...
DENY CONNECT SQL TO ...
Để kiểm tra user hiện tại đang đăng nhập bằng login nào trong database, dùng:
SELECT USER_NAME()
SELECT SUSER_SNAME()
SELECT CURRENT_USER()
Nếu bạn REVOKE một quyền từ user, điều gì xảy ra?
Quyền đó bị thu hồi hoàn toàn
Quyền đó bị xóa, nhưng user có thể nhận lại từ vai trò khác
SQL Server sẽ vô hiệu hóa login
Không có tác dụng nếu quyền chưa được cấp
Quyền DENY có độ ưu tiên thế nào so với GRANT?
GRANT cao hơn DENY
DENY cao hơn GRANT
Cả hai ngang nhau, quyền mới nhất ghi đè
Tùy thuộc vào vai trò
Muốn xóa một login nhưng login này đang được dùng trong database, bạn phải:
Dùng DROP LOGIN trực tiếp
Xóa tất cả user được ánh xạ trong database trước
Vô hiệu hóa login rồi xóa
Dùng REVOKE CONNECT trước
Hàm trong SQL Server có thể trả về: Một giá trị scalar (mệnh đề 1) hay Một bảng (table-valued function) (mệnh đề 2)
Mệnh đề 1
Mệnh đề 2
Không trả về gì
Cả mệnh đề 1 và mệnh đề 2
Lệnh nào tạo stored procedure mới?
CREATE PROCEDURE proc_name AS BEGIN ... END
CREATE FUNCTION proc_name AS BEGIN ... END
CREATE PROC proc_name TABLE ...
CREATE PROCEDURE proc_name RETURN ...
Lệnh nào tạo hàm scalar?
CREATE FUNCTION func_name(@param INT) RETURNS INT AS BEGIN RETURN @param+1 END
CREATE PROCEDURE func_name(@param INT)
CREATE FUNCTION func_name AS BEGIN ... END
CREATE PROC func_name RETURNS INT ...
Stored Procedure có thể nhận tham số không?
Có
Không
Chỉ khi dùng OUTPUT
Chỉ khi dùng default value
Hàm trong SQL Server có thể thay đổi dữ liệu bảng không?
Có
Không
Stored Procedure có thể trả về giá trị thông qua:
RETURN
OUTPUT parameter
SELECT bảng
Hàm trong SQL Server có thể thay đổi dữ liệu bảng không?
Có
Không
Stored Procedure có thể trả về giá trị thông qua:
RETURN
OUTPUT parameter
SELECT bảng dữ liệu
Tất cả các đáp án còn lại
Lệnh nào thực thi stored procedure?
EXEC proc_name
EXECUTE proc_name @param=1
CALL proc_name()
Hàm scalar có thể dùng trong:
SELECT statement
WHERE clause
JOIN condition
Tất cả các đáp án đều đúng
Inline table-valued function (TVF) khác multi-statement TVF ở điểm nào?
Inline TVF chỉ có một SELECT duy nhất
Multi-statement TVF có BEGIN…END và có thể chứa nhiều logic
Inline TVF nhanh hơn thường xuyên
Tất cả các đáp án đều đúng
Khi muốn bắt lỗi trong stored procedure, dùng:
TRY…CATCH
BEGIN…END
IF…ELSE
SET ERROR
Lệnh nào sửa thủ tục hiện có?
ALTER PROCEDURE proc_name AS BEGIN ... END
UPDATE PROCEDURE proc_name AS BEGIN ... END
MODIFY PROCEDURE proc_name ...
CREATE OR REPLACE PROCEDURE proc_name ...
Lệnh nào sửa hàm hiện có?
ALTER FUNCTION func_name
MODIFY FUNCTION func_name
UPDATE FUNCTION func_name
CREATE OR REPLACE FUNCTION func_name
Thủ tục có thể gọi hàm không?
Có
Không
Chỉ scalar function
Chỉ table-valued function
Stored Procedure có thể gọi stored procedure khác không?
Có, trực tiếp bằng EXEC
Không
Chỉ khi cùng schema
Chỉ khi cùng database
OUTPUT parameter dùng để:
Trả về giá trị
Chỉ hiển thị dữ liệu trong procedure
Tự động commit transaction
Định nghĩa default value
Hàm không thể chứa:
INSERT/UPDATE/DELETE vào bảng cơ sở
SELECT statement
Câu lệnh tính toán
RETURN statement
Khi muốn hàm trả về bảng duy nhất từ SELECT, dùng:
Inline table-valued function
Multi-statement table-valued function
Stored Procedure
Scalar function
Hàm có thể nhận tham số không?
Có
Không
Chỉ scalar function
Chỉ table-valued function
Lệnh nào gọi TVF trong SELECT?
SELECT * FROM dbo.FuncName(@param)
EXEC dbo.FuncName @param
CALL dbo.FuncName(@param)
RUN dbo.FuncName(@param)
Hàm có thể nhận tham số không?
Có
Không
Chỉ scalar function
Chỉ table-valued function
RETURN trong function dùng để:
Trả giá trị theo kiểu đã định (scalar hoặc table)
Trả về bảng kết quả
Thay đổi bảng cơ sở
Gọi procedure khác
Trong SQL Server, VIEW là gì?
Một bảng vật lý lưu trữ dữ liệu
Một bảng ảo dựa trên câu lệnh SELECT
Một thủ tục lưu trữ (stored procedure)
Một hàm trả về bảng
Lệnh nào tạo VIEW cơ bản?
CREATE VIEW view_name AS SELECT ...
CREATE TABLE view_name AS SELECT ...
CREATE PROCEDURE view_name AS SELECT ...
CREATE FUNCTION view_name() RETURNS TABLE ...
Để chỉnh sửa câu lệnh SELECT của một VIEW, bạn dùng:
ALTER VIEW view_name AS SELECT ...
UPDATE VIEW view_name AS SELECT ...
MODIFY VIEW view_name ...
RECREATE VIEW view_name ...
Khi xóa VIEW, dùng lệnh nào?
DROP VIEW view_name
DELETE VIEW view_name
REMOVE VIEW view_name
ALTER VIEW view_name DROP
VIEW có thể lấy dữ liệu từ:
Một bảng duy nhất
Nhiều bảng bằng JOIN
Một VIEW khác
Tất cả các đáp án đều đúng
Nếu muốn hạn chế cột và hàng mà người dùng nhìn thấy, bạn dùng:
Table
Function
View
Index
VIEW có thể cập nhật dữ liệu không?
Luôn luôn được
Không bao giờ được
Có thể, nếu view đơn giản và không chứa group by, join phức tạp
Chỉ khi có WITH CHECK OPTION
Lệnh nào xóa và tạo lại view một cách an toàn nếu đã tồn tại?
DROP VIEW IF EXISTS view_name; CREATE VIEW view_name AS ...
ALTER VIEW IF EXISTS ...
REPLACE VIEW view_name AS ...
CREATE OR ALTER VIEW ...
View có thể chứa lệnh ORDER BY không?
Không bao giờ được phép
Chỉ khi dùng TOP hoặc OFFSET FETCH
Luôn được phép
Chỉ khi có SCHEMABINDING
Lệnh nào dùng để đổi tên view?
ALTER VIEW ... RENAME TO ...
EXEC sp_rename 'old_name', 'new_name'
RENAME VIEW old_name TO new_name
UPDATE VIEW old_name NAME new_name
Lệnh nào dùng để đổi tên view?
ALTER VIEW ... RENAME TO ...
EXEC sp_rename 'old_name', 'new_name'
RENAME VIEW old_name TO new_name
UPDATE VIEW old_name NAME new_name
Để xem danh sách tất cả view trong database:
SELECT * FROM sys.views
SELECT * FROM information_schema.views
Dùng Object Explorer trong SSMS
Tất cả các đáp án đều đúng
View có thể tham chiếu đến bảng trong database khác không?
Không bao giờ được
Được, nếu chỉ định đầy đủ tên [database].[schema].[table]
Chỉ khi dùng linked server
Chỉ khi có quyền sysadmin
Quyền nào cần để tạo view trong database?
CREATE VIEW
ALTER ANY VIEW
Quyền SELECT trên bảng cơ sở
Tất cả các đáp án trên đều đúng
Có thể cấp quyền SELECT trên view mà không cấp quyền trực tiếp trên bảng cơ sở không?
Có
Không
Chỉ khi view có SCHEMABINDING
Chỉ khi user là db_owner
View và Table-Valued Function (TVF) khác nhau ở điểm nào?
View không nhận tham số, còn TVF có thể nhận tham số
View luôn nhanh hơn TVF
TVF không thể join với bảng khác
View lưu dữ liệu còn TVF không lưu
Khi một view cơ sở bị xóa, view tham chiếu đến bảng đó sẽ:
Tự động xóa
Vẫn tồn tại nhưng trở thành invalid
Tự động chuyển sang bảng khác
Tự động làm mới định nghĩa
Một view có thể tham chiếu tới chính nó không?
Có, được phép đệ quy
Không, SQL Server không cho phép view tự tham chiếu
Chỉ khi dùng WITH RECURSIVE
Chỉ khi view là indexed view
Một view phức tạp với nhiều JOIN, GROUP BY, subquery có thể:
Luôn cập nhật dữ liệu trực tiếp
Không thể cập nhật dữ liệu
Chỉ SELECT được, không thể UPDATE hoặc DELETE
Một view có thể chứa lệnh UNION không?
Không bao giờ được
Có thể, nhưng view indexed thì không
Chỉ khi view là WITH SCHEMABINDING
Chỉ khi view là WITH CHECK OPTION
View có thể tham chiếu tới table-valued function không?
Có, giống như tham chiếu bảng
Không, SQL Server không cho phép
Chỉ khi function là inline TVF
Chỉ khi TVF không có parameter
Trigger trong SQL Server được kích hoạt khi nào?
Khi chạy thủ công
Khi xảy ra một sự kiện dữ liệu
Khi khởi động SQL Server
Khi chạy job
DML Trigger được kích hoạt bởi các câu lệnh nào?
SELECT
INSERT, UPDATE, DELETE
CREATE, ALTER, DROP
CREATE LOGIN
Lệnh tạo trigger trong SQL Server là:
CREATE PROCEDURE
CREATE FUNCTION
CREATE TRIGGER
CREATE EVENT
Bảng deleted trong trigger chứa:
Dữ liệu sau khi cập nhật
Dữ liệu bị xóa hoặc trước khi cập nhật
Dữ liệu mới
Dữ liệu tạm
Cú pháp cơ bản để tạo trigger:
CREATE TRIGGER name ON database FOR INSERT
CREATE TRIGGER name AFTER INSERT
CREATE TRIGGER name ON table AFTER INSERT
CREATE TRIGGER name ON table INSERT
INSTEAD OF trigger dùng để:
Thay thế hành động mặc định của câu lệnh DML
Thực thi song song với hành động DML
Tạo bản sao dữ liệu
Xóa dữ liệu tạm
Trigger có thể gọi thủ tục lưu trữ (stored procedure) không?
Không
Có
Chỉ trong DDL Trigger
Chỉ khi trigger là AFTER
Khi một trigger bị vô hiệu hóa, SQL Server:
Tự động xóa trigger
Không kích hoạt trigger khi sự kiện xảy ra
Báo lỗi
Chạy trigger sau cùng
Lệnh tắt trigger tạm thời:
DROP TRIGGER
ALTER TRIGGER
DISABLE TRIGGER
DEACTIVATE TRIGGER
Để bật lại trigger:
ENABLE TRIGGER
ACTIVATE TRIGGER
RUN TRIGGER
START TRIGGER
Trigger có thể chứa lệnh ROLLBACK TRANSACTION để:
Khôi phục dữ liệu sau khi xóa
Hủy bỏ thay đổi dữ liệu vi phạm quy tắc
Xóa dữ liệu trùng
Sao lưu dữ liệu
Trigger không nên dùng cho:
Kiểm tra ràng buộc dữ liệu nhỏ
Ghi log thay đổi
Xử lý nghiệp vụ phức tạp nặng
Gửi thông báo khi cập nhật
Một trigger có thể xử lý nhiều hàng dữ liệu không?
Không, chỉ một hàng
Có, xử lý theo tập (set-based)
Ví dụ về câu lệnh kích hoạt DDL trigger:
INSERT
UPDATE
CREATE TABLE
SELECT
DDL Trigger không thể tạo trên:
Cơ sở dữ liệu
Server
Bảng cụ thể
Toàn hệ thống
DDL Trigger có thể xử lý sự kiện nào sau đây?
CREATE, ALTER, DROP
INSERT, UPDATE
SELECT
BACKUP
Trong DDL trigger, hàm hệ thống nào chứa thông tin sự kiện xảy ra?
EVENT_DATA()
TRIGGER_INFO()
SYSOBJECTS()
DB_EVENTS()
DDL Trigger có thể rollback việc tạo bảng không?
Có
Không
Khi trigger dùng ROLLBACK, kết quả là:
Hành động bị hủy
Trigger bị xóa
Không ảnh hưởng
Câu lệnh tiếp tục
