3 回答

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊
表名不能作為參數(shù)提供,因此您必須像這樣手動(dòng)構(gòu)建SQL字符串:
SET @SQLQuery = 'SELECT * FROM ' + @TableName + ' WHERE EmployeeID = @EmpID'
但是,請確保您的應(yīng)用程序不允許用戶直接輸入的值@TableName,因?yàn)檫@會(huì)使您的查詢?nèi)菀资艿絊QL注入的影響。有關(guān)此問題的一種可能的解決方案

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊
為了防止SQL注入,我通常嘗試盡可能使用函數(shù)。在這種情況下,您可以執(zhí)行以下操作:
...
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貢獻(xiàn)1854條經(jīng)驗(yàn) 獲得超8個(gè)贊
嘗試這個(gè):
/* 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 關(guān)注
- 1049 瀏覽
添加回答
舉報(bào)