1

长期搜索者第一次海报。

我正在尝试创建一个动态 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

4

2 回答 2

3

在 SQl Server 2005 中使用 Alexander Fedorenko 的答案会给出错误“无法将默认值分配给局部变量”。然后对于每个变量“必须声明标量变量“@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

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

于 2013-04-11T17:49:07.020 回答
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
于 2013-04-10T20:25:01.427 回答