长期搜索者第一次发布海报。
我正在尝试创建一个动态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
答案 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