【发布时间】:2015-09-28 11:20:18
【问题描述】:
我已经声明了一个临时表
DECLARE @Table Table
(
ID INT IDENTITY(1,1),
TableColumn VARCHAR(MAX)
)
DECLARE @Temp VARCHAR(MAX)
SET @Temp='SELECT * FROM '+'@Table'+''
SELECT @Temp
EXEC (@Temp)
我想将@Table的所有数据设置为变量@Temp。以上我试过的做法是否正确?目前它显示了一些错误。
消息 1087,第 15 级,状态 2,第 1 行
必须声明表变量“@Table”。
我尝试了上面的方法然后它显示错误
消息 156,第 15 级,状态 1,第 1 行
关键字“AS”附近的语法不正确。
消息 1087,第 15 级,状态 2,第 9 行
必须声明表变量“@Table”。消息 139,级别 15,状态 1, 第 0 行
无法为局部变量分配默认值。
消息 137,级别 15,状态 2,第 17 行
必须声明标量变量“@Temp”。
【问题讨论】:
-
为什么要使用字符串。只需执行:Select * From @Table
-
@Jeremy 我想将值设置为这个字符串
-
您的问题不清楚。你想设置什么?
-
您为什么要尝试使用动态 SQL?只需像任何其他表一样执行选择语句。像这样执行的时候,表变量在字符串的作用域中是不存在的。
-
我认为
DECLARE和EXEC的执行流程是分开的,因此您不能像这样选择@Table 的数据形式。删除动态 SQL 并运行SELECT * FROM @Table,它会带你到你想要的地方。
标签: sql-server-2008