SQL 在链接服务器问题上使用 select 删除
SQL Delete using select on linked server issue
我有 2 个具有相同表的数据库。
两个数据库都在不同的 SQL 服务器上。
我添加了第二个 SQL 服务器作为链接服务器,效果很好。
我想 运行 对链接的数据库进行简单的删除(以便删除不在本地数据库上的 ID)。
当我在同一台服务器上同时拥有两个数据库时,它可以工作
DELETE FROM TM.dbo.Departments
WHERE NOT EXISTS (SELECT * FROM SPO.dbo.Departments
WHERE TM.dbo.Departments.DepartmentID = spo.dbo.Departments.DepartmentID);
但是当我在链接服务器上尝试这个时,它看起来像这样
DELETE FROM [LINKEDSRV].[TM].[dbo].[Departments]
WHERE NOT EXISTS (SELECT * FROM SPO.dbo.Departments WHERE
spo.dbo.Departments.DepartmentID = [LINKEDSRV].[TM].[dbo].[Departments].DepartmentID)
最后一行是我无法让它工作的地方。
希望大家多多指教!
试试这个:
DELETE LS
FROM [LINKEDSRV].[TM].[dbo].[Departments] LS
WHERE NOT EXISTS (SELECT 1 FROM SPO.dbo.Departments D
WHERE D.DepartmentID = LS.DepartmentID)
正如我在评论中提到的,3+ 列命名已弃用(即 schema.object.column
)。为您的对象添加别名,然后在列名称前添加简洁易读的名称 SQL.
我有 2 个具有相同表的数据库。 两个数据库都在不同的 SQL 服务器上。 我添加了第二个 SQL 服务器作为链接服务器,效果很好。
我想 运行 对链接的数据库进行简单的删除(以便删除不在本地数据库上的 ID)。
当我在同一台服务器上同时拥有两个数据库时,它可以工作
DELETE FROM TM.dbo.Departments
WHERE NOT EXISTS (SELECT * FROM SPO.dbo.Departments
WHERE TM.dbo.Departments.DepartmentID = spo.dbo.Departments.DepartmentID);
但是当我在链接服务器上尝试这个时,它看起来像这样
DELETE FROM [LINKEDSRV].[TM].[dbo].[Departments]
WHERE NOT EXISTS (SELECT * FROM SPO.dbo.Departments WHERE
spo.dbo.Departments.DepartmentID = [LINKEDSRV].[TM].[dbo].[Departments].DepartmentID)
最后一行是我无法让它工作的地方。 希望大家多多指教!
试试这个:
DELETE LS
FROM [LINKEDSRV].[TM].[dbo].[Departments] LS
WHERE NOT EXISTS (SELECT 1 FROM SPO.dbo.Departments D
WHERE D.DepartmentID = LS.DepartmentID)
正如我在评论中提到的,3+ 列命名已弃用(即 schema.object.column
)。为您的对象添加别名,然后在列名称前添加简洁易读的名称 SQL.