使用SqlCommand插入select子查询

时间:2010-09-08 08:48:12

标签: c# sql sqlcommand

使用带嵌套选择的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

是否有解释此问题以及如何解决此问题,因为我不知道状态的ID是什么,除了执行单独的选择查询?

2 个答案:

答案 0 :(得分: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'

错误很有意义,因为您可以从子查询中获得多行。在我的建议中,你也可能最终得到多行。过滤器应该有更多吗?

答案 1 :(得分: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);