Инструкция INSERT не может содержать инструкцию SELECT -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? и каково лучшее решение, если я хочу вернуть таблицу из моих хранимых процедур? что не так в моем запросе?
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
Альтернативный и сложный способ выполнения одной и той же задачи приведен ниже. Надеюсь, никому это не нравится. Просто я показываю, что у нас есть еще один альтернативный способ.
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