Sql 选择合并不工作后的查询

Sql 选择合并不工作后的查询,sql,sql-server,sql-server-2008,merge,Sql,Sql Server,Sql Server 2008,Merge,我正在执行以下步骤: 合并stmt。如果值不存在,merge语句会将值插入视图中 选择stmt。选择我插入的记录 但是select查询返回空白。示例代码如下所示: declare @now AS DATETIME = GETUTCDATE(), @uuid AS INT = 1; MERGE A.V_Table AS T ( Select A1, A2 FROM B.Table )S on T.A1 = T1.A1 and T.A2 =

我正在执行以下步骤:

  • 合并stmt。如果值不存在,merge语句会将值插入视图中
  • 选择stmt。选择我插入的记录
但是select查询返回空白。示例代码如下所示:

declare @now AS DATETIME = GETUTCDATE(),
        @uuid AS INT = 1;

MERGE A.V_Table AS T
(
  Select 
     A1,
     A2
  FROM B.Table
)S
on T.A1 = T1.A1
   and T.A2 = T1.A2
when not matched by target then
insert
(
  A1,
  A2,
  UpdateUUID,
  UpdateTimeStamp
)
values
(
 s.a1,
 s.a2,
 @uuid,
@now
);

select *
from A.V_Table
where updateuUid = @uuid and UpdateTimeStamp = @now;
如果我打印出@now和@uuid的值,并在select查询中使用这些值,则会返回记录。但当其按上述方式执行时,情况并非如此


你知道为什么会这样吗?select查询不是只有在合并完成后才运行吗?

合并过程后,您缺少的只是“GO”关键字:

declare @now AS DATETIME = GETUTCDATE(),
        @uuid AS INT = 1;

MERGE A.V_Table AS T
(
  Select 
     A1,
     A2
  FROM B.Table
)S
on T.A1 = T1.A1
   and T.A2 = T1.A2
when not matched by target then
insert
(
  A1,
  A2,
  UpdateUUID,
  UpdateTimeStamp
)
values
(
 s.a1,
 s.a2,
 @uuid,
@now
); 
GO

select *
from A.V_Table
where updateuUid = @uuid and UpdateTimeStamp = @now;

uuid而不是变量名是打字错误吗?“你证明应该插入什么东西了吗?”托尼·霍普金森,谢谢。这是个打字错误。是的,我检查过有东西会被插入。我打印出“@now,@uuid”,并用这些值运行select查询,它工作了。如果您在合并上设置了一个output子句。。要查看插入/删除的内容?(输出deleted.updateuid,inserted.updateuid,deleted.UpdateTimeStamp,inserted.UpdateTimeStamp;)