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

SQL插入,使用合并存储过程更新,sql,sql-server,stored-procedures,user-defined-functions,bulkinsert,Sql,Sql Server,Stored Procedures,User Defined Functions,Bulkinsert,我需要对SQL数据库中的目标表执行大容量插入和/或更新。我已经尝试了合并存储过程。在目标表中,我有一个复合键 插入时,我需要为密钥的第一个字段生成一个模式。我尝试了一个用户定义的函数,该函数返回的模式键对于每一行都是唯一的 我的问题是,如何将此函数合并到一个查询中,该查询将自动生成密钥并为每个记录插入相应的字段 TargetTable是数据库中的目标表,它有两列—Key1Bigint和Key2int。同样,这是一个复合键 注意:我只想为第一个字段/列生成键 以下是我的存储过程: Merge Ta

我需要对SQL数据库中的目标表执行大容量插入和/或更新。我已经尝试了合并存储过程。在目标表中,我有一个复合键

插入时,我需要为密钥的第一个字段生成一个模式。我尝试了一个用户定义的函数,该函数返回的模式键对于每一行都是唯一的

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

TargetTable是数据库中的目标表,它有两列—Key1Bigint和Key2int。同样,这是一个复合键

注意:我只想为第一个字段/列生成键

以下是我的存储过程:

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

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

使用select col1、col2,而不是将sourcetable用作s,dbo。UserDefiendFunction@parama1源表as中的as模式s@Nick.McDermaid我尝试过你的方法..用户定义函数为我插入的所有行返回相同的模式..原因是用户定义函数只调用一次…它在插入过程中会违反主键约束…它不起作用..是吗表示对于两个具有相同@parama1值的UDF调用,总是会得到不同的值,您永远不会得到两次相同的值?@Nick.McDermaid这里我们在合并存储过程中使用用户定义的函数。合并存储过程只扫描所有批量值一次。因此,用户定义的函数只调用一次。它永远不会调用两次。它将为所有行提供相同的模式。在批量插入期间,我需要为所有行提供不同的模式每行..您可以发布自定义项的代码吗?因为合并存储过程只扫描所有值一次..因此用户定义的函数只调用一次..我插入的所有行的模式都是相同的..我需要每行的不同模式。。。。。
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