Sql server 在不存在SQL和数据类型转换的情况下,使用SQL的正确方法是什么?

Sql server 在不存在SQL和数据类型转换的情况下,使用SQL的正确方法是什么?,sql-server,Sql Server,假设我有表A和表B,表A包含30行ID,表B包含60行ID,我想使用where not exist将B.ID插入到A.ID中。如果表A中不存在表B ID,则表B ID将插入表A中 INSERT INTO A( ID) SELECT ID FROM B WHERE NOT EXISTS (Select ID From A WHERE A.ID = B.ID) 我认为我的子查询中存在一些问题。请告诉我如何纠正这个问题 假设A.ID是NVARCHAR(200)类型,B.ID是FLOAT类型 INS

假设我有表A和表B,表A包含30行ID,表B包含60行ID,我想使用where not exist将B.ID插入到A.ID中。如果表A中不存在表B ID,则表B ID将插入表A中

INSERT INTO A(
ID)
SELECT ID
FROM B
WHERE NOT EXISTS (Select ID From A WHERE A.ID =  B.ID)
我认为我的子查询中存在一些问题。请告诉我如何纠正这个问题

假设A.ID是NVARCHAR(200)类型,B.ID是FLOAT类型

INSERT INTO A(
ID)
SELECT Cast(Cast(ID as Float)as Nvarchar)
FROM B
WHERE NOT EXISTS (Select ID From A WHERE A.ID =  B.ID)
但仍然存在错误:将数据类型nvarchar转换为float时出错

蒂亚

但是我想让你看看


但是我想让您看看。

使用join而不是sub-query以获得更好的性能

INSERT INTO A(ID)
SELECT CAST(B.ID AS nvarchar(200))
FROM A RIGHT JOIN B ON A.ID = CAST(B.ID AS NVARCHAR(200)) WHERE A.ID IS NULL

使用联接而不是子查询以获得更好的性能

INSERT INTO A(ID)
SELECT CAST(B.ID AS nvarchar(200))
FROM A RIGHT JOIN B ON A.ID = CAST(B.ID AS NVARCHAR(200)) WHERE A.ID IS NULL

您遇到了什么问题?ok的可能重复此问题已解决,谢谢Mark,但出现了另一个错误:将数据类型nvarchar转换为浮点型时出错。您遇到了什么问题?ok的可能重复此问题已解决,谢谢Mark,但出现了另一个错误:将数据类型nvarchar转换为浮点型时出错。