为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

月关宝盒 2019-11-19 14:37:12
我想在动态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 SMALLINTDECLARE @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动态地使用参数,但是我做不到。请指导我。
查看完整描述

3 回答

?
慕哥6287543

TA贡献1831条经验 获得超10个赞

表名不能作为参数提供,因此您必须像这样手动构建SQL字符串:


SET @SQLQuery = 'SELECT * FROM ' + @TableName + ' WHERE EmployeeID = @EmpID' 

但是,请确保您的应用程序不允许用户直接输入的值@TableName,因为这会使您的查询容易受到SQL注入的影响。有关此问题的一种可能的解决方案


查看完整回答
反对 回复 2019-11-19
?
眼眸繁星

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' 



查看完整回答
反对 回复 2019-11-19
?
哔哔one

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


查看完整回答
反对 回复 2019-11-19
  • 3 回答
  • 0 关注
  • 968 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信