【发布时间】:2015-06-02 11:10:16
【问题描述】:
有人可以解释一下为什么下面的查询有效吗?我假设第一个 DECLARE 使用足够长的 VARCHAR 来保存表名。但是为什么第二个 DECLARE 使用 VARCHAR 以及为什么它的相应查询需要包含在“引号”中?
USE Northwind
DECLARE @TableName VARCHAR(25)=
(Select top 1 tab.name
From Sys.tables tab
Where name not like 'dtproperties'
and name not like 'sysdiagrams'
order by tab.name asc)
DECLARE @Output VARCHAR(100) =
'SELECT COUNT(*) AS [CountOf_' + @TABLENAME + ']
FROM [' + @TABLENAME + ']'
EXEC(@Output)
【问题讨论】:
-
你也应该非常小心这个查询。它没有正确转义。
-
@Output 的值是 varchar (text/string) 的类型,所以需要用引号括起来。
-
第一个声明语句只是将字符串值设置为“表名”,这就像从另一个变量中分配一个变量一样。第二个声明语句就像为变量“输出”分配常量或文字值一样。所以它应该用引号括起来..
标签: sql-server sql-server-2012 dynamic-sql