Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 是否可以使用Sql合并语法从另一个变量表更新/插入数据?_Sql Server 2008_Merge_Insert Update - Fatal编程技术网

Sql server 2008 是否可以使用Sql合并语法从另一个变量表更新/插入数据?

Sql server 2008 是否可以使用Sql合并语法从另一个变量表更新/插入数据?,sql-server-2008,merge,insert-update,Sql Server 2008,Merge,Insert Update,我希望插入或更新表中的一行,因此我希望尝试使用语法。我的问题是我的数据(要插入/更新)存在于变量表中。我不知道如何为插入/更新部分编写正确的语法 这是我的PSEDOO代码:- -- Here's the Variable Table ... and not it has not PK. DECLARE @PersonId INTEGER DECLARE @variableTable TABLE ( @SomeScore DECIMAL(10,7), @SomeAverage D

我希望
插入
更新
表中的一行,因此我希望尝试使用语法。我的问题是我的数据(要插入/更新)存在于
变量表中。我不知道如何为插入/更新部分编写正确的语法

这是我的PSEDOO代码:-

-- Here's the Variable Table ... and not it has not PK.
DECLARE @PersonId INTEGER

DECLARE @variableTable TABLE (
    @SomeScore DECIMAL(10,7),
    @SomeAverage DECIMAL(10,7),
    @SomeCount INTEGER)

-- Insert or Update
MERGE INTO SomeTable
WHERE PersonId = @PersonId
WHEN MATCHED THEN
    UPDATE
    SET PersonScore = ??????????
        PersonAverage = ???????
        PersonCount = ????????
WHEN NOT MATCHED THEN
    INSERT(PersonId, PersonScore, PersonAverage, PersonCount)
    VALUES(@PersonId, ????, ?????, ????)
。。我不确定如何确保
UPDATE
只正确地更新了一行(即…是否需要
WHERE
子句?)


最后,我的这篇文章是基于。

是的,这是可能的。不过你的语法是错的。下面的方法似乎有效。我将
@PersonId
作为一个单独的标量变量保留在表变量之外,因为这就是您在问题中的用法。我假设SomeTable的主键是
PersonId

DECLARE @PersonId INT

DECLARE @variableTable TABLE (
    SomeScore DECIMAL(10,7),
    SomeAverage DECIMAL(10,7),
    SomeCount INTEGER
    )

-- Insert or Update
MERGE SomeTable AS T
USING @variableTable AS S
ON (T.PersonId = @PersonId) 

WHEN MATCHED THEN
    UPDATE
    SET T.PersonScore = SomeScore,
        T.PersonAverage = SomeAverage,
        T.PersonCount = SomeCount
WHEN NOT MATCHED  BY TARGET THEN
    INSERT(PersonId, PersonScore, PersonAverage, PersonCount)
    VALUES(@PersonId, SomeScore, SomeAverage, SomeCount);

干杯,马丁。星期一我回办公室的时候,我会试一试的。当我读到你的答案时,这确实有道理:)踢屁股!谢谢