选择和数据检索操作错误

时间:2014-06-13 16:51:51

标签: sql sql-server

我收到一条错误消息,指出“为变量赋值的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

2 个答案:

答案 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