jla*_*497 3 sql sql-server-2008-r2
我正在尝试将几行插入到表中。这些行的几乎所有值都与同一个表上的另一组记录匹配,因此我很好奇是否可以编写带有多个 SELECT 语句的单个 INSERT 语句来插入多行。像这样的东西:
INSERT INTO table (col1, col2, col3, col4)
SELECT (newRecordID, col2, col3, col4)
FROM table WHERE col1 = oldRecordID AND col4 = 0
SELECT (newRecordID, col2, col3, col4)
FROM table WHERE col1 = oldRecordID AND col4 = 1
SELECT (newRecordID, col2, col3, col4)
FROM table WHERE col1 = oldRecordID AND col4 = 2
SELECT (newRecordID, col2, col3, col4)
FROM table WHERE col1 = oldRecordID AND col4 = 3
Run Code Online (Sandbox Code Playgroud)
这可能吗?最后,它应该插入 4 行,全部具有相同的 NewRecordID,col4 值为 0-3,其他 col 值取自同一个表上相应的 OldRecordID。当我运行它时,它只运行第一个 INSERT SELECT 语句,然后将其他语句作为它们自己的 SELECT 语句运行。我在连接这些东西时遗漏了什么吗?我总是可以多次运行它并每次更改值,但我想知道是否有办法避免这种情况。我很欣赏并提供帮助或有用的提示。
谢谢
您可以与 Union 连接,将它们连接到一个记录集中:
INSERT INTO table (col1, col2, col3, col4)
SELECT (newRecordID, col2, col3, col4)
FROM table WHERE col1 = oldRecordID AND col4 = 0
union
SELECT (newRecordID, col2, col3, col4)
FROM table WHERE col1 = oldRecordID AND col4 = 1
union
SELECT (newRecordID, col2, col3, col4)
FROM table WHERE col1 = oldRecordID AND col4 = 2
union
SELECT (newRecordID, col2, col3, col4)
FROM table WHERE col1 = oldRecordID AND col4 = 3
Run Code Online (Sandbox Code Playgroud)