动态SQL - 连接FROM表

时间:2013-04-10 17:59:53

标签: sql tsql sql-server-2005 dynamic ssms

长期搜索者第一次发布海报。

我正在尝试创建一个动态SQL脚本,它将动态部分连接成一个字符串以形成From子句,所以我只能声明一次表名(以后我会添加到这个,这样我就可以遍历整个一堆表)。但是,当我运行脚本时,我收到错误:'+'

附近的语法不正确
DECLARE @SCode varchar(4)
DECLARE @Subcode varchar(4)

SET @SCode = 'Client1'
SET @Subcode = 'A'          
SELECT MAX(dateofchange) AS Maxdate, @SCode + 'Type'.ID 
FROM @SCode + 'Type'

非常感谢任何帮助。我确信答案很简单,但我对SQL游戏很陌生。

谢谢,SSMS - 2005

2 个答案:

答案 0 :(得分:3)

使用Alexander Fedorenko在SQl Server 2005中的答案,它给出了一个错误“无法为本地变量分配默认值”。然后为每个变量“必须声明标量变量”@dml“”

这样做的原因是,在2005年你必须声明变量并设置为

DECLARE @SCode AS VARCHAR(MAX)
SET @scode ='ID12'

我简化了示例a,但下面的代码是SSMS 2005的工作示例

DECLARE @dml  as NVARCHAR(MAX)
DECLARE @SCode AS VARCHAR(MAX)
SET @scode ='ID12'
Set @dml='SELECT ID 
FROM '+ QUOTENAME(+@SCode +'Type')
EXEC sp_executesql @dml

旁注:为什么你不能用代码块对答案发表评论超出我的范围。

答案 1 :(得分:1)

尝试使用此动态SQL脚本(SQLServer2008 +的选项)

DECLARE @SCode varchar(10) = 'Client1',
        @Subcode varchar(10) = 'A',
        @dml nvarchar(400)
SELECT @dml = 'SELECT MAX(dateofchange) AS Maxdate, ID FROM ' + QUOTENAME( + @SCode + 'Type')
EXEC sp_executesql @dml