2010-09-08 5 views
0

У меня возникла проблема при использовании инструкции INSERT с вложенным select. Запрос работает при его выполнении в SQLManagement Studio, но возвращает ошибку при ее выполнении в коде.Вставить с помощью подзапроса с помощью SqlCommand

Запрос выглядит следующим образом: вернулся

INSERT INTO [Projects] 
    VALUES ('1', 'None', '2', '2010/09/08 10:36:30 AM', 4, 1, 4, '6', '', 'n/a', 'no', 'n/a', 'None', 0, 'n/a', 'n/a', 'no', 'A3', 'no', 'Blnk', 'aa', 
    (SELECT status.statusID from status where name = 'STOPPED') 

)

Ошибка:

Subqueries are not allowed in this context. Only scalar expressions are allowed 

есть объяснение для этого, и как будет идти, чтобы решить эту проблему, поскольку я не знаете, что такое идентификатор статуса, помимо выполнения отдельного запроса выбора?

ответ

3

Вы могли бы попробовать это ...

INSERT INTO [Projects] 
SELECT '1', 'None', '2', '2010/09/08 10:36:30 AM', 4, 1, 4, '6', '', 'n/a', 'no', 'n/a', 'None', 0, 'n/a', 'n/a', 'no', 'A3', 'no', 'Blnk', 'aa', 
status.statusID from status where name = 'STOPPED' 

Ошибка имеет смысл, потому что вы можете иметь несколько строк из суб запроса. По моему мнению, вы также можете получить несколько строк. Должно быть больше для фильтра?

+0

Спасибо, теперь я вижу, почему ошибка была выбрана, на самом деле нет ничего, что можно было бы фильтровать. Я как бы предпологал, что выбор будет возвращать только 1 значение – fluf

+0

Удивительно, что это работает отлично Спасибо – fluf

1

Лучший способ - создать хранимую процедуру.

declare @statusID int; 

SELECT @statusID=status.statusID from status where name = 'STOPPED' 

INSERT INTO [Projects] 
    VALUES ('1', 'None', '2', '2010/09/08 10:36:30 AM', 4, 1, 4, '6', '', 'n/a', 'no', 'n/a', 'None', 0, 'n/a', 'n/a', 'no', 'A3', 'no', 'Blnk', 'aa',@statusID); 
Смежные вопросы