如何在动态SQL查询中设置表名?

我想在动态SQL查询中设置表名。我成功尝试了参数,如下所示:


/* Using sp_executesql */

/* Build and Execute a Transact-SQL String with a single parameter 

value Using sp_executesql Command */


/* Variable Declaration */

DECLARE @EmpID AS SMALLINT

DECLARE @SQLQuery AS NVARCHAR(500)

DECLARE @ParameterDefinition AS NVARCHAR(100)

/* set the parameter value */

SET @EmpID = 1001

/* Build Transact-SQL String by including the parameter */

SET @SQLQuery = 'SELECT * FROM tblEmployees WHERE EmployeeID = @EmpID' 

/* Specify Parameter Format */

SET @ParameterDefinition =  '@EmpID SMALLINT'

/* Execute Transact-SQL String */

EXECUTE sp_executesql @SQLQuery, @ParameterDefinition, @EmpID

现在,我想TABLE NAME动态地使用参数,但是我做不到。请指导我。


月关宝盒
浏览 979回答 3
3回答

慕哥6287543

表名不能作为参数提供,因此您必须像这样手动构建SQL字符串:SET @SQLQuery = 'SELECT * FROM ' + @TableName + ' WHERE EmployeeID = @EmpID' 但是,请确保您的应用程序不允许用户直接输入的值@TableName,因为这会使您的查询容易受到SQL注入的影响。有关此问题的一种可能的解决方案

眼眸繁星

为了防止SQL注入,我通常尝试尽可能使用函数。在这种情况下,您可以执行以下操作:...SET @TableName = '<[db].><[schema].>tblEmployees'SET @TableID&nbsp; &nbsp;= OBJECT_ID(TableName) --won't resolve if malformed/injected....SET @SQLQuery = 'SELECT * FROM ' + OBJECT_NAME(@TableID) + ' WHERE EmployeeID = @EmpID'&nbsp;

哔哔one

尝试这个:/* Variable Declaration */DECLARE @EmpID AS SMALLINTDECLARE @SQLQuery AS NVARCHAR(500)DECLARE @ParameterDefinition AS NVARCHAR(100)DECLARE @TableName AS NVARCHAR(100)/* set the parameter value */SET @EmpID = 1001SET @TableName = 'tblEmployees'/* Build Transact-SQL String by including the parameter */SET @SQLQuery = 'SELECT * FROM ' + @TableName + ' WHERE EmployeeID = @EmpID'&nbsp;/* Specify Parameter Format */SET @ParameterDefinition =&nbsp; '@EmpID SMALLINT'/* Execute Transact-SQL String */EXECUTE sp_executesql @SQLQuery, @ParameterDefinition, @EmpID
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server