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之间的差异吗?如果我想从我的存储过程中返回一个表,那么最佳解决方案是什么?我的查询有什么问题?
答案 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