SQL插入,使用合并存储过程进行更新

时间:2015-12-29 10:46:21

标签: sql sql-server stored-procedures user-defined-functions bulkinsert

我需要为SQL数据库中的目标表执行批量Insert和/或Update。我已经尝试过Merge存储过程。在目标表中,我有一个复合键。

我需要在插入时为第一个字段(键)生成一个模式。我尝试过一个用户定义的函数,它返回一个模式键,它对每一行都是唯一的。

我的问题是,如何将此功能合并到一个自动生成密钥并为每条记录插入相应字段的查询中?

TargetTable是我在数据库中的目标表,它有两列 - Key1(Bigint)Key2(int)。再次,这是一个复合键。

注意:我只想生成第一个字段/列的密钥。

这是我的存储过程:

Merge Targettable as T  
Using SourceTable as s  
ON s.Key1 = T.Key1 and  
s.Key2=T.Key2  
WHEN MATCHED THEN UPDATE  
SET T.UserName = S.UserName  
WHEN NOT MATCHED THEN  
INSERT (Key1, Key2, UserName)  
VALUES (dbo.UserDefiendFunction(@parama1),Key2,userName)

UserDefinedFunction返回我想要的模式。 这是我的用户定义函数:

Create function [dbo].[UserDefinedFunction] (  
@Param1 int)  
returns BIGINT   
AS Begin  
DECLARE @ResultVar BIGINT  
SET @ResultVar=CONVERT(BIGINT, (SELECT Cast(@Param1 AS VARCHAR(10))  
+ '' + Format((SELECT Count(userName)+1 FROM [dbo].[TableName]), '0')) )  
RETURN @ResultVar  
END

请帮我解决这个问题。提前谢谢。

1 个答案:

答案 0 :(得分:0)

IF EXISTS (SELECT * FROM Table1 join table 2 on Column1='SomeValue')
UPDATE Table1 SET (...) WHERE Column1='SomeValue'
ELSE
insert into ods..Table1 (Columname)
select [DatabaseName].[dbo].[UserDefinedFunction] (@paramater) as ColumnName