Trong quá trình phát triển ứng dụng, đôi khi chúng ta lại cần thực hiện một truy vấn SQL không định nghĩa trước, đó là lý do tại sao gọi là phát biểu SQL động.
Một truy vấn SQL mà tên bảng từ bên ngoài đưa vào hay tên bảng xuất phát từ một phép toán gán nào đó thì chúng ta gọi là truy vấn SQL động.
Để thực hiện truy vấn SQL này, bạn phải sử dụng lệnh EXEC hoặc EXECUTE.
Cú pháp thực hiện:
EXEC ({biến kiểu chuỗi | ‘lệnh truy vấn’})
Ví dụ 1:
–Khai báo biến @tenbang chứa tên bảng cần truy vấn
DECLARE @tenbang VARCHAR(100)
–Gán biến @tenbang có giá trị là Categories
SET @tenbang = ‘Categories’
–Thực hiện lệnh truy vấn SQL động với EXEC hoăc EXECUTE
EXEC(‘SELECT * FROM ‘ + @tenbang)
Kết quả:

Ví dụ 2: Thực thi câu SQL động sử dụng biến chứa câu lệnh truy vấn SQL
–Khai báo biến @chuoiSQL chứa chuỗi truy vấn SQL
DECLARE @chuoiSQL VARCHAR(100)
–Gán biến @chuoiSQL có giá trị là truy vấn SQL với bảng Categories
SET @chuoiSQL = ‘SELECT * FROM Categories’
SET @chuoiSQL = @chuoiSQL + ‘ WHERE Name=”TV”’
–Thực thi phát biểu SQL động
EXECUTE(@chuoiSQL)
Kết quả:

Ví dụ 3: Sử dụng biến trong truy vấn SQL động
DECLARE @chuoiSQL VARCHAR(100)
DECLARE @bienName VARCHAR(50)
SET @chuoiSQL = ‘SELECT @bienName = CategoryID FROM Categories’
SET @chuoiSQL = @chuoiSQL + ‘ WHERE Name=”TV”’
EXECUTE(@chuoiSQL)
SELECT @bienName
Kết quả: lệnh EXEC có lỗi do @bienName được khai báo bên ngoài chuỗi SQL động.

Ví dụ 4: Sử dụng biến được khai báo bên trong lệnh truy vấn SQL động
–Khai báo biến @chuoiSQL chứa chuỗi truy vấn SQL
DECLARE @chuoiSQL VARCHAR(100)
–Gán biến @chuoiSQL là truy vấn SQL với khai báo biến @Ten trong chuỗi
SET @chuoiSQL = ‘DECLARE @Ten VARCHAR(50) SELECT @Ten = CategoryID FROM Categories’
SET @chuoiSQL = @chuoiSQL + ‘ WHERE Name=”TV” SELECT @Ten’
EXECUTE(@chuoiSQL)
Kết quả:
