当前位置: 首页 > 面试题库 >

使用输出在合并语句中设置变量

张高义
2023-03-14
问题内容

我有一个合并语句,该语句应始终更新或插入单个记录。我想记住该语句在变量中的ID。看起来像这样:

DECLARE @int int

MERGE dbo.table AS A
USING (SELECT 'stringtomatch' AS string) AS B ON B.string= A.string
WHEN MATCHED THEN 
    UPDATE SET somecolumn = 'something'
WHEN NOT MATCHED THEN
    INSERT 
    VALUES ('stringtomatch',
        'something')
OUTPUT @int = inserted.ID;

现在这不起作用,因为您不能以这种方式在输出子句中设置@int。我知道我可以创建一个模板并在输出中使用 INTO @temptable 。但是由于我
知道 它始终是一条记录,因此我希望将ID包含在INT变量中。这有可能吗?还是我被迫使用表变量。我希望我只是缺少一些语法。


问题答案:

不,您必须在OUTPUT中使用表变量

但是,您可以执行此操作…

...
WHEN MATCHED THEN 
    UPDATE
    SET
       @int = ID,
       somecolumn = 'something'
WHEN NOT MATCHED THEN
    INSERT 
    VALUES ('stringtomatch',
        'something');

SET @int = ISNULL(@int, SCOPE_IDENTITY());

很长时间以来,“在UPDATE中分配”一直是SQL
Server的有效语法。也请参见MSDN上的MERGE。双方都这样说:


<set_clause>::=

SET

@变量=表达式



 类似资料:
  • 问题内容: 问题 表格1: 表2: 表3: 给定键(A1或A2),我需要使用表2中的相应值更新表1中的DataColumn1和DataColumn2列。 因此,table1可以更新x个行,如上面的数据所示。如果我要更新A1,则01和02行都应更新 (因此,表01中的值对于键01和键02的datacolumn1分别为0.15和1.2(对于datacolumn2)) 到目前为止我尝试过的是: 问题:

  • 问题内容: 我试图编写一个简单的查询,在其中声明一些变量,然后在Oracle的select语句中使用它们。我以前可以在SQL Server中使用以下命令执行此操作: 从我完成的搜索看来,您无法在Select语句中声明和设置像这样的变量。这是对的还是我在发短信? 问题答案: 从我完成的搜索看来,您无法在Select语句中声明和设置像这样的变量。 这是对的还是我错过了什么? 在Oracle PL /

  • 问题内容: 我必须使用和在单个查询中。对于该SQL具有语句。 MySQL中是否支持该语句。如果支持,请提供样本。 问题答案: MySQL不支持,但是,还有其他可能的方法可以做到这一点: 插入…在重复密钥更新上 如果您在INSERT语句中指定ON DUPLICATE KEY UPDATE选项,并且新行在UNIQUE或PRIMARY KEY索引中导致重复值,则MySQL将基于新值对旧行进行更新。

  • 问题内容: 我正在尝试创建一个查询,该查询将针对中的每个服务器中特定数据库中的特定表执行一次。 对于每个我想知道的内容。 所以我需要的是这样的: 然而,在似乎并不工作。 有什么建议吗?感谢您与我一起思考。 问题答案: 您必须使用动态sql: 这是有关exec的更多信息。

  • 问题内容: 我有三个查询结果。 查询1: 查询2: 查询:3 我想输出一个表,其中包含所有三个查询的结果,例如(很抱歉,但我必须在这里写更多内容,以便我可以提交此帖子。我希望这足够;-)): 我尝试了 但是,出现以下错误: 我不确定为什么这是错误的,或者在这里是否正确的方法。有人知道吗? 问题答案: 导致错误的直接原因是引用手册: (并且可以连接到如果一个子表达式 括在括号中 。如果没有括号,这些