繁体   English   中英

INSERT语句不能包含SELECT语句-sql server2012

[英]INSERT statement cannot contain a SELECT statement -sql server2012

    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的一种尊重吗? 如果要从存储过程中返回表,什么是最佳解决方案? 我的查询有什么问题?

根据问题中提供的信息,变量似乎是不必要的。 您可以像这样直接执行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

下面是完成另一项任务的另一种复杂方法。 希望没人喜欢这个。 我只是向我们展示了我们还有另一种替代方法。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM