Вставить с помощью подзапроса select с помощью SqlCommand - PullRequest
0 голосов
/ 08 сентября 2010

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

Запрос выглядит так:

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

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

Ответы [ 2 ]

3 голосов
/ 08 сентября 2010

Вы можете попробовать это ...

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'

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

1 голос
/ 08 сентября 2010

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

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);
...