3 回答

TA貢獻1831條經驗 獲得超10個贊
表名不能作為參數提供,因此您必須像這樣手動構建SQL字符串:
SET @SQLQuery = 'SELECT * FROM ' + @TableName + ' WHERE EmployeeID = @EmpID'
但是,請確保您的應用程序不允許用戶直接輸入的值@TableName,因為這會使您的查詢容易受到SQL注入的影響。有關此問題的一種可能的解決方案

TA貢獻1873條經驗 獲得超9個贊
為了防止SQL注入,我通常嘗試盡可能使用函數。在這種情況下,您可以執行以下操作:
...
SET @TableName = '<[db].><[schema].>tblEmployees'
SET @TableID = OBJECT_ID(TableName) --won't resolve if malformed/injected.
...
SET @SQLQuery = 'SELECT * FROM ' + OBJECT_NAME(@TableID) + ' WHERE EmployeeID = @EmpID'

TA貢獻1854條經驗 獲得超8個贊
嘗試這個:
/* Variable Declaration */
DECLARE @EmpID AS SMALLINT
DECLARE @SQLQuery AS NVARCHAR(500)
DECLARE @ParameterDefinition AS NVARCHAR(100)
DECLARE @TableName AS NVARCHAR(100)
/* set the parameter value */
SET @EmpID = 1001
SET @TableName = 'tblEmployees'
/* Build Transact-SQL String by including the parameter */
SET @SQLQuery = 'SELECT * FROM ' + @TableName + ' WHERE EmployeeID = @EmpID'
/* Specify Parameter Format */
SET @ParameterDefinition = '@EmpID SMALLINT'
/* Execute Transact-SQL String */
EXECUTE sp_executesql @SQLQuery, @ParameterDefinition, @EmpID
- 3 回答
- 0 關注
- 1051 瀏覽
添加回答
舉報