【问题标题】:INSERT statement cannot contain a SELECT statement -sql server2012INSERT 语句不能包含 SELECT 语句 -sql server 2012
【发布时间】:2014-08-05 06:32:07
【问题描述】:
    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 之间的区别吗?如果我想从存储过程中返回一个表,最好的解决方案是什么?我的查询有什么问题?

【问题讨论】:

  • 为什么不先赋值给变量,然后用变量插入呢?另外,是否保证select 查询只返回 1 行?
  • 如果Users 中不止一行的available 等于1,您希望这样做吗?
  • @shree.pat18 ,是的,这是我的另一个问题,有时结果不止一行!我该怎么办?
  • 为什么你需要这些变量?从这个 sn-p 的代码中我看不到它们的用途。
  • 嗯,我们不能两者互相询问在特定场景中的预期行为是什么。我在问你期望在这种情况下会发生什么。我不知道“解决方案”是什么,因为您没有告诉我您的期望。

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


【解决方案1】:

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

【讨论】:

  • 我这样做了,但在您回答之前它不起作用!现在它运作良好!我很困惑,但非常感谢你..
【解决方案2】:

执行相同任务的另一种复杂方法如下。希望没有人喜欢这个。我只是在展示我们还有另一种方法。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 2011-06-09
    • 2011-12-04
    • 2011-03-04
    相关资源
    最近更新 更多