sql - 使用插入和更新模拟 SQL 合并
问题描述
我有两个本地和远程数据库,从本地到远程的一种方式访问。我们只能从本地数据库插入和更新远程数据库。我写了一个合并查询,但无法远程执行,因为远程数据库无法访问源数据库,所以我想将其转换为插入和更新命令。如果远程数据库中有行,则应更新,如果不存在,则应插入
我的合并代码是
MERGE INTO [RemoteIp].[dbname].[dbo].[MTest] AS [Target]
USING (SELECT * FROM [dbo].[Products]
) AS [Source] ([ProductID],[ProductName],[Rate])
ON ([Target].[PID] = [Source].[ProductID])
WHEN MATCHED AND (
NULLIF([Source].[ProductID], [Target].[PID]) IS NOT NULL OR NULLIF([Target].[PID], [Source].[ProductID]) IS NOT NULL OR
NULLIF([Source].[ProductName], [Target].[ProductName]) IS NOT NULL OR NULLIF([Target].[ProductName], [Source].[ProductName]) IS NOT NULL OR
NULLIF([Source].[Rate], [Target].[Rate]) IS NOT NULL OR NULLIF([Target].[Rate], [Source].[Rate]) IS NOT NULL) THEN
UPDATE SET
[Target].[PID] = [Source].[ProductID],
[Target].[ProductName] = [Source].[ProductName],
[Target].[Rate] = [Source].[Rate]
WHEN NOT MATCHED BY TARGET THEN
INSERT([PID],[ProductName],[Rate])
VALUES([Source].[ProductID],[Source].[ProductName],[Source].[Rate]);
我试试这个插入和更新
IF EXISTS(SELECT * FROM [RemoteIP].[DBName].[db].[Mtest])
BEGIN
--update existing row
UPDATE
[RemoteIP].[DBName].[db].[Mtest]
SET
[RemoteIP].[DBName].[db].[Mtest].pid = products.ProductID,
[RemoteIP].[DBName].[db].[Mtest].ProductName = products.ProductName,
[RemoteIP].[DBName].[db].[Mtest].Rate = products.Rate
FROM
Mtest tr INNER JOIN products sr
ON tr.pid = sr.ProductID
END
ELSE
BEGIN
--insert new row
INSERT INTO [RemoteIP].[DBName].[db].[Mtest] (pid, ProductName, Rate)
VALUES ([products].[ProductID], [products].[ProductName], [products].[Rate])
运行查询时出现此错误
The multi-part identifier …… could not be bound in line 4
解决方案
下一步是检查UPDATE
命令的语法。一旦别名[RemoteIP].[DBName].[db].[Mtest]
为,命令范围内tr
就没有更多内容了。[RemoteIP]....
只有tr
. 试试这个:
UPDATE
tr
SET
pid = sr.ProductID,
ProductName = sr.ProductName,
Rate = sr.Rate
FROM
[RemoteIP].[DBName].[db].[Mtest] tr INNER JOIN products sr
ON tr.pid = sr.ProductID
推荐阅读
- git - WebStorm:Git 集成不与终端 git 同步
- python-3.x - 在 Python tkinter 中的窗口之间登录后传递用户数据
- vuejs2 - Vuetify 有条件的深色主题
- django - django modelviewset 响应添加其他信息,当我请求发布时不想调用 create()
- c# - WPF IsMouseOver 和单击时背景更改
- python - 如何将此递归更改为循环
- http - 我的网站无法运行,无法启动 Plone。bin/instance fg 不起作用
- android - 内部使用库(Artifactory)中的Android第三方依赖项
- php - php 发送/回显 '?' 对于每个 require_once
- c# - 如何在可以将其他用户控件置于前面之前显示消息对话框