Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 插入到已创建的表中会引发错误_Sql Server_Insert Into - Fatal编程技术网

Sql server 插入到已创建的表中会引发错误

Sql server 插入到已创建的表中会引发错误,sql-server,insert-into,Sql Server,Insert Into,下面的代码显示了第2行中SELECT语句的错误 INSERT INTO (SELECT A.Column1, B.Column2 FROM Table1 A LEFT JOIN Table2 B ON A.Id = B.Id) AB SELECT Column1, Column2 FROM ExtraData C 我在这里要做的是-我有两个表,A和B,它们需要连接(以生成表AB),然后在这个连接的表中我必须添加一些额外的行,这些

下面的代码显示了第2行中SELECT语句的错误

INSERT INTO (SELECT A.Column1, B.Column2 
             FROM Table1 A
             LEFT JOIN Table2 B ON A.Id = B.Id) AB
   SELECT Column1, Column2
   FROM ExtraData C
我在这里要做的是-我有两个表,A和B,它们需要连接(以生成表AB),然后在这个连接的表中我必须添加一些额外的行,这些行在C中出现

如果我在
插入到
之前为表AB创建一个临时表,它似乎可以正常工作


对插入有这样的限制吗?

在SQL Server中不能这样做。我不知道什么RDBMS支持这种语法,甚至不知道您希望输出什么

有两种方法可以将数据插入临时表。您已经发现了第一个是
createtable#AB(…)
,然后是
INSERT-INTO#AB

第二种方法是使用
选择。。。进入

SELECT A.Column1, B.Column2 
INTO #AB
FROM Table1 A
LEFT JOIN Table2 B
ON A.Id = B.Id

-- Now that #AB is defined, you can use INSERT INTO to add additional data
INSERT INTO #AB (Column1, Column2)
   SELECT Column1, Column2
   FROM   ExtraData C

如果要创建名为
AB
的表,请使用
选择“进入”

SELECT Column1, Column2
INTO AB
FROM ExtraData C;
不过,你到底想做什么还不清楚

如果是这种情况,则使用
union all

SELECT A.Column1, B.Column2 
INTO AB
FROM Table1 A LEFT JOIN
     Table2 B
     ON A.Id = B.Id
UNION ALL
SELECT Column1, Column2
FROM ExtraData C;
如果已经定义了表,请执行以下操作:

INSERT INTO AB(column1, column2)    
    SELECT A.Column1, B.Column2 
    FROM Table1 A LEFT JOIN
         Table2 B
         ON A.Id = B.Id
    UNION ALL
    SELECT Column1, Column2
    FROM ExtraData C;

是,您不能在Sql Server中执行此操作。我不知道哪个RDBMS支持这个表单。正如您提到的,您需要创建具有两列的
temp
insert
语句中缺少表名。你想做什么?@Gordon-我没有把select语句末尾的新表命名为AB吗?我有两个表需要连接(以生成表AB),然后我必须在这个连接的表中添加一些额外的行,这些行出现在CYour sql up top中,并没有显示你选择的内容。我猜这就是第2行的语法错误。除此之外,您只需要添加两个数据源之间的联合,如本例所示
INSERT INTO SomeTable
SELECT A.Column1, B.Column2 
FROM Table1 A
LEFT JOIN Table2 B
ON A.Id = B.Id
UNION
SELECT Column1, Column2
FROM ExtraData C