2012-08-09 31 views
1

我正在使用SQL Server 2008.存储过程将INSERT INTO VALUES从另一个表中选择一个值

以下是存储过程的一部分。 @ Param1 - > @ Param6是存储过程参数。

这就是我要做的:

INSERT INTO myTable 
VALUES (otherTableValue, @Param2, @Param3, @Param4, @Param5) 
SELECT ID as otherTableValue 
FROM otherTable 
WHERE otherTable.Param6 = @Param6 

我收到“无效列名”的错误。我究竟做错了什么?

+0

我不知道你是否可以同时使用VALUES和SELECT。也许只是SELECT ID,Param2,Param3,Param4,Param5 – jkj 2012-08-09 21:57:30

+1

语法不正确。 http://msdn.microsoft.com/en-us/library/ms174335.aspx – 2012-08-09 22:08:11

回答

2

您的语法错误。要在insert使用select,使用select代替values

INSERT INTO myTable 
SELECT ID, @Param2, @Param3, @Param4, @Param5 
FROM otherTable 
WHERE otherTable.Param6 = @Param6 
+0

谢谢,这个工程。不过,我选择sam yi的答案是因为它确实应该包含列名。 – Mausimo 2012-08-09 22:13:02

+0

@Mausimo:列名是个好主意,但你选择的答案并不能回答这个问题。缺乏列名不是它不起作用的原因。 – Guffa 2012-08-09 22:18:41

+0

你的权利。你的写作为我的例子不起作用提供了最好的答案。希望我可以给2个复选标记>。<,谢谢。 – Mausimo 2012-08-09 22:21:47

0

语法错误。 @Param2,@Param3等不是列名。

INSERT INTO myTable 
VALUES (otherTableValue, field2, field3, field4, field5) 
SELECT ID as otherTableValue, @Param2, @Param3, @Param4, @Param5 
FROM otherTable 
WHERE otherTable.Param6 = @Param6 
+0

尽管Param2和Param3不是列名,但SELECT语句仍会返回这些参数的值。因此,这确实起作用。 – 2012-08-09 22:27:47

1

一般来说,好的做法是添加列名......如果有人使模式发生变化,该怎么办?

INSERT INTO myTable (ColName1, ColName2, ColName3, ColName4, ColName5) 
SELECT ID,@Param2, @Param3, @Param4, @Param5 
FROM otherTable 
WHERE otherTable.Param6 = @Param6 
+0

谢谢,这个工程。由于架构更改,我同意列是一个好主意。 – Mausimo 2012-08-09 22:13:31

相关问题