我收到一条错误消息,指出“为变量赋值的SELECT语句不能与数据检索操作结合使用。”我知道当我选择@column 2 = cast时会发生这种情况......但不知道如何解决这个问题。有什么建议吗?
declare
column1 int = 0,
column2 int = 0,
column3 int = 0,
column4 int = 0,
insert into dbo.tableName (column1, column2, column3, column4)
select @column1,
@column2 = cast((row_number() over(order by column4)) as int),
@column3,
@column4,
from table
答案 0 :(得分:0)
您正尝试在表格表达式中为@column2
分配值。您必须单独执行此操作。顺便说一句,如果你不打算用它构建动态sql,你将无法为变量分配row_number()
和OVER
子句......
或者,您可以像这样编写INSERT
操作:
declare
@column1 int,
@column2 int,
@column3 int,
@column4 int
select
@column1 = 0,
@column2 = 0,
@column3 = 0,
@column4 = 0
insert into dbo.tableName (column1, column2, column3, column4)
select @column1,
cast((row_number() over(order by column4)) as int),
@column3,
@column4
from databaseName
答案 1 :(得分:0)
您可以在一行中声明多个变量,或者您可以将值分配给一行中的多个变量。但是你不能声明并在一行中为多个变量赋值。
另一方面,您可以在一行中声明一个变量并为其赋值。 (仅在sql server 2008和更高版本中允许)。
在声明变量时,你也遗漏了@
。
declare @column1 int, @column2 int, @column3 int,@column4 int
SELECT @column1 = 0, @column2 =0, @column3 = 0, @column4 = 0;
insert into dbo.tableName (column1, column2, column3, column4)
select @column1
,row_number() over (order by column4) --<-- No need to cast as int
,@column3
,@column4
from table