带select的SQL insert语句
我有下面的SQL语句带select的SQL insert语句,sql,sql-server-2005,Sql,Sql Server 2005,我有下面的SQL语句 INSERT INTO A_Table (field1, field2) SELECT field1, field2 FROM B_Table WHERE field1 NOT IN ( SELECT field1 FROM A_Table); SELECT field1, field2 FROM B_Table WHERE field1 NOT IN ( SELECT field1 FROM A_Table) 基本上,我需要将所有数据
INSERT INTO A_Table (field1, field2)
SELECT field1, field2 FROM B_Table
WHERE field1 NOT IN (
SELECT field1 FROM A_Table);
SELECT field1, field2 FROM B_Table
WHERE field1 NOT IN (
SELECT field1 FROM A_Table)
基本上,我需要将所有数据从B_表复制到A_表,但A_表中不存在约束:B_表中的字段1。我需要添加这个约束,因为field1是一个键
这看起来像是一个冲突:字段1不在从B_表复制到a_表的_表中。在插入过程中,从B_表复制的记录将存在于A_表中。不确定它是否有效,或者是否有任何意外的结果
也许没关系。最后一个SELECT缓存在临时表中,在插入过程中不会刷新
顺便说一句,我的SQL server是Microsoft SQL server 2005。由于您没有在子查询中指定列,因此该查询在其当前形式下似乎无法工作。很可能它仍在执行,并且假设您的意思是
不在(null)
那么,由于您没有在子查询中指定列,该查询在当前形式下似乎无法工作。很可能它仍在执行,并且假设您的意思是不在(null)
SQL语句被执行,就好像一切都是立即发生的一样。从逻辑上讲,指令没有部分执行的时间点。SQL语句的执行就好像一切都是立即发生的一样。(从逻辑上讲)指令没有部分执行的时间点。SELECT的结果集是在任何插入发生之前确定的,因此不存在冲突。否则,这样的声明将永远不会安全。这有点像代码:
x = 1;
x = x + x + 1;
对右侧进行求值,然后才将其指定给左侧的变量-否则谁知道x将如何结束 选择的结果集是在任何插入发生之前确定的,因此不存在冲突。否则,这样的声明将永远不会安全。这有点像代码:
x = 1;
x = x + x + 1;
对右侧进行求值,然后才将其指定给左侧的变量-否则谁知道x将如何结束 它应该可以正常工作
您应该始终设置一个测试环境,在那里您可以尝试一些东西,看看会发生什么。在你搞乱数据库之前,你永远不想依赖陌生人的建议 它应该可以正常工作
您应该始终设置一个测试环境,在那里您可以尝试一些东西,看看会发生什么。在你搞乱数据库之前,你永远不想依赖陌生人的建议 如果您将查询看作两个独立的语句,可能会有所帮助 select语句
INSERT INTO A_Table (field1, field2)
SELECT field1, field2 FROM B_Table
WHERE field1 NOT IN (
SELECT field1 FROM A_Table);
SELECT field1, field2 FROM B_Table
WHERE field1 NOT IN (
SELECT field1 FROM A_Table)
这会给你一些结果
现在将这些结果插入到表A_表中
INSERT INTO A_Table (field1, field2)
实现这一点的代码是
INSERT INTO A_Table (field1, field2)
SELECT field1, field2 FROM B_Table
WHERE field1 NOT IN (
SELECT field1 FROM A_Table)
这基本上就是你所发布的如果你把你的查询看作两个独立的语句,也许会有所帮助 select语句
INSERT INTO A_Table (field1, field2)
SELECT field1, field2 FROM B_Table
WHERE field1 NOT IN (
SELECT field1 FROM A_Table);
SELECT field1, field2 FROM B_Table
WHERE field1 NOT IN (
SELECT field1 FROM A_Table)
这会给你一些结果
现在将这些结果插入到表A_表中
INSERT INTO A_Table (field1, field2)
实现这一点的代码是
INSERT INTO A_Table (field1, field2)
SELECT field1, field2 FROM B_Table
WHERE field1 NOT IN (
SELECT field1 FROM A_Table)
这基本上就是您发布的内容您的insert语句将如下面的SQL所示工作-
CREATE TABLE #temp1 (id INT IDENTITY(1,1) PRIMARY KEY CLUSTERED , [name] NVARCHAR(20))
CREATE TABLE #temp2 (id INT IDENTITY(1,1) PRIMARY KEY CLUSTERED , [name] NVARCHAR(20))
INSERT INTO #temp1 ([name])
VALUES ('name1')
INSERT INTO #temp1 ([name])
VALUES ('name2')
INSERT INTO #temp1 ([name])
VALUES ('name3')
INSERT INTO #temp1 ([name])
VALUES ('name4')
INSERT INTO #temp2 ([name])
VALUES ('Othername1')
INSERT INTO #temp2 ([name])
VALUES ('Othername2')
INSERT INTO #temp2 (name)
SELECT name FROM #temp1
WHERE id NOT IN (SELECT id FROM #temp2)
SELECT * FROM #temp1
SELECT * FROM #temp2
DROP TABLE #temp1
DROP TABLE #temp2
导致
temp1
id名称1名称1
2名称2
3名称3
4名称4
temp2 id名称
1其他名称1
2其他名称2
3名称3
4 name4
您的insert语句将按此SQL所示工作-
CREATE TABLE #temp1 (id INT IDENTITY(1,1) PRIMARY KEY CLUSTERED , [name] NVARCHAR(20))
CREATE TABLE #temp2 (id INT IDENTITY(1,1) PRIMARY KEY CLUSTERED , [name] NVARCHAR(20))
INSERT INTO #temp1 ([name])
VALUES ('name1')
INSERT INTO #temp1 ([name])
VALUES ('name2')
INSERT INTO #temp1 ([name])
VALUES ('name3')
INSERT INTO #temp1 ([name])
VALUES ('name4')
INSERT INTO #temp2 ([name])
VALUES ('Othername1')
INSERT INTO #temp2 ([name])
VALUES ('Othername2')
INSERT INTO #temp2 (name)
SELECT name FROM #temp1
WHERE id NOT IN (SELECT id FROM #temp2)
SELECT * FROM #temp1
SELECT * FROM #temp2
DROP TABLE #temp1
DROP TABLE #temp2
导致
temp1
id名称1名称1
2名称2
3名称3
4名称4
temp2 id名称
1其他名称1
2其他名称2
3名称3
4名称4