在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语句时,由于它在字符串中的格式很难阅读。

任何建议将有所帮助。

+0

btw,不是'SET sql = ...'但是'SET @sql = ...' – abatishchev 2010-06-18 10:25:19

+0

是的,谢谢修复。当我按下@时,我一直在大声疾呼。我不知道我可以这样做。谢谢。 – 2010-06-18 10:27:03

+0

ón:该产品被称为“SQL Server”,而不是“MSSQL”。 – 2010-06-22 07:04:30

为什么不将参数传递给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注入。