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