INSERT语句不能包含SELECT语句-sql server 2012

时间:2014-08-05 06:32:08

标签: sql sql-server stored-procedures sql-server-2012 sql-insert

    declare @us table(name nvarchar(100),lastname nvarchar(100),UID bigint,available bit);
        declare
        @Name nvarchar(100),
        @lastname nvarchar(100),
        @UID bigint,
        @Avail bit

        insert into @us
        select @name=name,@lastname=lastname,@UID=UID,@Avail=available from Users where available='1'
 select * from @us

我收到了这个错误

  

INSERT语句不能包含分配的SELECT语句   值变量。

我搜索了这个问题,但很多人使用这样的查询,他们说没有问题!我使用sql server 2012,它是MSSQL2012和MSSQL2008之间的差异吗?如果我想从我的存储过程中返回一个表,那么最佳解决方案是什么?我的查询有什么问题?

2 个答案:

答案 0 :(得分:2)

根据问题中提供的信息,变量似乎是不必要的。你可以像这样直接INSERT...SELECT

declare @us table(name nvarchar(100),lastname nvarchar(100),UID bigint,available bit);

insert into @us
select name,lastname,UID,available 
from Users 
where available='1'

select * from @us

答案 1 :(得分:1)

执行相同任务的替代和复杂方式如下。希望没有人喜欢这个。我正在展示我们还有一种替代方式。

declare @us table(name nvarchar(100),lastname nvarchar(100),UID bigint,available bit);
declare @Name nvarchar(100), @lastname nvarchar(100), @UID bigint,@Avail bit

DECLARE ALLRECORDS CURSOR FOR 
    SELECT name,lastname,UID,available from Users where available='1'

     OPEN ALLRECORDS
     FETCH NEXT FROM ALLRECORDS INTO @Name,@lastname,@UID,@Avail

        WHILE @@FETCH_STATUS = 0
        BEGIN
        INSERT INTO @us    
        SELECT @Name,@lastname,@UID,@Avail 

        FETCH NEXT FROM ALLRECORDS INTO @Name,@lastname,@UID,@Avail
        END
CLOSE ALLRECORDS
DEALLOCATE ALLRECORDS
SELECT * FROM @us