我需要为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
请帮我解决这个问题。提前谢谢。
答案 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