Cal*_*ton 0 sql t-sql sql-server
当我尝试运行此语句时,我不断收到以下错误消息.我在SSIS中的OLE DB命令中运行它.
')附近的语法不正确
显然这是一个易于阅读的错误消息,但我不知道为什么我会得到它.我检查了T-SQL文档,我很确定我需要它们的括号.
INSERT INTO
dbo.Table1 (
[ID],
[Supplier],
[Level],
[Status],
[Core],
[Location],
[Outsourced],
[Contact],
[Phone],
[Email]
)
SELECT
[ID],
[Supplier],
[Level],
[Status],
[Core],
[Location],
[Outsourced],
[Contact],
[Phone],
[Email]
FROM
dbo.Table2
WHERE
NOT (
[ID],
[Supplier],
[Level],
[Status],
[Core],
[Location],
[Outsourced],
[Contact],
[Phone],
[Email] IN (
SELECT
[ID],
[Supplier],
[Level],
[Status],
[Core],
[Location],
[Outsourced],
[Contact],
[Phone],
[Email]
FROM
dbo.table1
)
)
Run Code Online (Sandbox Code Playgroud)
马丁史密斯对M.Ali的答案写了一篇很好的评论 - 你确定你在这里做的正确吗?如果任何列中的任何值在两个表中都不同,则select语句将返回它.
这意味着如果表2中的记录具有所有相同的值,除了表1中具有记录的记录,则select语句将返回它,并且您可能会得到最坏的主键违规错误 - 重复的行(除了表1中的
那一行.考虑到你应该做的是从表2中选择表1中不存在关键列的所有记录 - 任何唯一约束或索引的一部分列,不只是主键.
因此,假设ID是主键,并为示范的缘故,你有一个唯一索引Phone和Email,你需要的是这样的:
INSERT INTO
dbo.Table1 (
[ID],
[Supplier],
[Level],
[Status],
[Core],
[Location],
[Outsourced],
[Contact],
[Phone],
[Email]
)
SELECT
[ID],
[Supplier],
[Level],
[Status],
[Core],
[Location],
[Outsourced],
[Contact],
[Phone],
[Email]
FROM
dbo.Table2 t2
WHERE NOT EXISTS
(
SELECT 1
FROM Table1 t1
WHERE t1.ID = t2.ID
OR (t1.Phone = t2.Phone AND t1.Email = t2.Email)
)
Run Code Online (Sandbox Code Playgroud)
该IN运营商不工作一样,在SQL Server中.它左侧只能有一个操作数,权限方面有许多操作数,因此它基本上将单个值与列表进行比较.T-SQL IN运算符的工作方式如下:
Col IN(value1, value2....valuen)
Run Code Online (Sandbox Code Playgroud)
相当于
Col = value1 or Col = value2....or Col = valuen`
Run Code Online (Sandbox Code Playgroud)
它在标准SQL中有效,并且有支持它的数据库,如MySql,但SQL Server没有.
您正在寻找EXCEPT:
INSERT INTO
dbo.Table1 (
[ID],
[Supplier],
[Level],
[Status],
[Core],
[Location],
[Outsourced],
[Contact],
[Phone],
[Email]
)
SELECT
[ID],
[Supplier],
[Level],
[Status],
[Core],
[Location],
[Outsourced],
[Contact],
[Phone],
[Email]
FROM
dbo.Table2
EXCEPT
SELECT
[ID],
[Supplier],
[Level],
[Status],
[Core],
[Location],
[Outsourced],
[Contact],
[Phone],
[Email]
FROM
dbo.table1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |