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 关注
- 1021 浏览
添加回答
举报