使用子查询插入多行

时间:2014-09-10 07:22:24

标签: sql-server tsql

我希望INSERT INTO一次有多个值,我通过执行以下操作来完成此操作:

INSERT INTO table_1(col_1,col_2,col_3)
SELECT col_1, col2, (SELECT col3 FROM table_3)
FROM table_2

但来自col3的{​​{1}}是日期时间格式,而来自table_3的{​​{1}}需要col3值。我通过以下方式做到了这一点:

table_1

当我运行此操作时,出现integer错误。我真的不知道如何解决这个问题。希望你这样做。

提前谢谢。

5 个答案:

答案 0 :(得分:0)

INSERT INTO table_1(col_1,col_2,col_3)
SELECT col_1, col2, (CAST(CONVERT(varchar(10),(SELECT top 1 col3 FROM table_3),112)AS int))
FROM table_2

您需要使用前1 来选择1行

答案 1 :(得分:0)

嗯,我认为错误说明了一切。您必须以WHERE条件以某种方式限制内部查询,例如使用TOP或MAX(col3)。取决于你想要的WHICH col3。

答案 2 :(得分:0)

您需要将table_2连接到table_3。不确定你的数据库结构是什么,但它应该是这样的:

INSERT INTO table_1(col_1,col_2,col_3)
SELECT t2.col_1, t2.col2, t3.col3 
FROM table_2 t2
INNER JOIN table_3 t3 on t3.t2id = t2.id

替代方法是使用TOP 1,只返回子查询中的1条记录 - 但我不建议这样做,因为它可能不是你想要的值:

INSERT INTO table_1(col_1,col_2,col_3)
SELECT col_1, col2, (SELECT top 1 col3 FROM table_3)
FROM table_2

答案 3 :(得分:0)

您可以使用CTE准备数据:

;WITH MyData (col1, col2, col3)
AS
(
    SELECT col_1, col2, CAST(CONVERT(varchar(10),(col3),112)AS int)
    FROM table_2 JOIN table_3 ON <join condition>
)
INSERT INTO table_1(col_1,col_2,col_3)
SELECT col_1, col2, col3
FROM MyData

答案 4 :(得分:0)

请尝试以下查询:

INSERT INTO table_1(col_1,col_2,col_3)
SELECT col_1, col2, isnull((SELECT TOP 1 cast(col3 as int) FROM table_3),0)
FROM table_2