在SQL Server中,如何为表创建引用变量?
问题描述:
我正在使用sp_executesql执行带有动态表名称的T-SQL语句。然而,这是十分可怕的,看看是这样的:在SQL Server中,如何为表创建引用变量?
set @sql = 'UPDATE '+Table_Name+' SET ... WHERE '+someVar+' = ... AND '+someVar2' = ...'
sp_executesql @sql
我宁愿希望有一个表变量,它是一个表的引用,这样我就可以,例如做:
UPDATE TableRef SET ... WHERE ...
因为当我有很长的T-SQL语句时,由于它在字符串中的格式很难阅读。
任何建议将有所帮助。
答
为什么不将参数传递给sp_executeSQL呢?
http://msdn.microsoft.com/en-us/library/ms188001.aspx
我也不得不这篇文章读得http://www.sommarskog.se/dynamic_sql.html
+0
看起来很合理,谢谢你的有用网站。由于无法在变量中引用表格,因此我会将您标记为此问题的答案。 谢谢。 – 2010-06-18 10:56:38
答
你不能。如果你想在你的SQL中使用动态表名,你必须将它连接到你的字符串中。
如果在查询中有很多对表名称的引用,可以通过别名表来对其进行缩短,对于所有其他实例,可以使用别名来缩短表名。
例如
SET @SQL = 'UPDATE t SET.... FROM ' + @TableName + ' t WHERE ....'
使用这种动态SQL时要非常小心。确保你防范SQL注入。
btw,不是'SET sql = ...'但是'SET @sql = ...' – abatishchev 2010-06-18 10:25:19
是的,谢谢修复。当我按下@时,我一直在大声疾呼。我不知道我可以这样做。谢谢。 – 2010-06-18 10:27:03
ón:该产品被称为“SQL Server”,而不是“MSSQL”。 – 2010-06-22 07:04:30