2010-04-15 27 views
10

Trong MS SQL Server Management Studio 2005, chạy mã nàyTại sao ghép các chuỗi trong đối số của EXEC đôi khi gây ra lỗi cú pháp trong T-SQL?

EXEC('SELECT * FROM employees WHERE employeeID = ' + CAST(3 AS VARCHAR)) 

cho lỗi này: Incorrect syntax near 'CAST'

Tuy nhiên, nếu tôi làm điều này, nó hoạt động:

DECLARE @temp VARCHAR(4000) 
SET @temp = 'SELECT * FROM employees WHERE employeeID = ' + CAST(3 AS VARCHAR) 
EXEC(@temp) 

Tôi tìm thấy một lời giải thích tại đây: T-SQL: Cannot pass concatenated string as argument to stored procedure

Theo câu trả lời được chấp nhận, EXEC có thể mất biến cục bộ hoặc giá trị làm đối số của nó, nhưng không phải là một biểu thức.

Tuy nhiên, nếu đó là trường hợp, tại sao không làm việc này:

DECLARE @temp VARCHAR(4000) 
SET @temp = CAST(3 AS VARCHAR) 
EXEC('SELECT * FROM employees WHERE employeeID = ' + @temp) 

'SELECT * FROM employees WHERE employeeID = ' + @temp vẻ chắc chắn như một biểu thức với tôi, nhưng mã thực thi không có lỗi.

Trả lời

9

The documentation nói rằng EXEC có thể sử dụng biến chuỗi, chuỗi T-SQL không đổi hoặc kết hợp/ghép nối của cả hai.

Ví dụ "tại sao công việc này" của bạn sử dụng kết nối chuỗi T-SQL không đổi và biến chuỗi và do đó hoàn toàn hợp pháp.

+0

Cảm ơn câu trả lời –

Các vấn đề liên quan