Bra*_*ock 1 sql t-sql sql-server merge
在SQL Server上执行以下操作时,我希望使用值88888888更新NULL,但它会插入一个新行.有人可以告诉我我做错了什么吗?
USE tempdb;
CREATE TABLE TableA (ColA CHAR(8), ColB CHAR(8))
CREATE TABLE TableB (ColA CHAR(8), ColB CHAR(8))
INSERT INTO TableA VALUES ( 'XXXXXXXX', NULL )
INSERT INTO TableA VALUES ( 'XXXXXXXX', '88888888')
MERGE INTO TableB AS T
USING TableA AS S
ON T.ColA = S.ColA and T.ColB = S.ColB
WHEN MATCHED
THEN
UPDATE
SET T.ColA = S.ColA, T.ColB = S.ColB
WHEN NOT MATCHED BY TARGET
THEN
INSERT (ColA, ColB) VALUES (S.ColA, S.ColB);
SELECT * FROM TableA
SELECT * FROM TableB
DROP TABLE TableA
DROP TABLE TableB
Run Code Online (Sandbox Code Playgroud)
非常感谢!最诚挚的问候,史蒂夫
a)表本质上是无序的.即使(正如您所期望的那样)合并一次进行一行(见c下文),也没有理由不会在行之前看到两行都为非null的行为nullColB
B)您ON子句指定要在两者匹配ColA和ColB.这两行中至少有一行是不同的,所以我希望两行都不匹配一行TableB,而且
c)应用SQL语句,就好像所有行同时受到并行影响一样.它不处理一行,然后移动到下一行.所以从来没有一个场合只有一排TableB.
不幸的是,你发布的内容显然是一个"玩具"的例子,所以我不能提供任何关于如何修复它的建议 - 你没有告诉我们真实情况是什么,真实数据是什么样的,为什么你正在使用MERGE等
| 归档时间: |
|
| 查看次数: |
831 次 |
| 最近记录: |