0

我需要爲SQL數據庫中的目標表執行批量Insert和/或Update。我已經嘗試了合併存儲過程。在目標表中我有一個組合鍵。SQL插入,使用合併存儲更新過程

我需要在插入時爲第一個字段(關鍵字)生成一個模式。我嘗試了一個用戶定義的函數,它返回一個對每個行都唯一的模式鍵。

我的問題是,如何將此函數合併到一個查詢中,該查詢將自動生成密鑰併爲每條記錄插入相應的字段?

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

而不是使用sourceTable會爲s'的','使用使用(選擇COL1,COL2,dbo.UserDefiendFunction(@ parama1)從sourceTable會模式)爲s' –

+0

@ Nick.McDermaid我有你的方法試過用戶定義的函數返回所有我插入的行相同的模式..原因是用戶定義函數只被調用一次...它會違反插入過程中的主鍵約束...它不會工作.. –

+0

你是說這對於兩次調用與@ parama1相同的值的UDF,你總是會得到不同的值,你永遠不會得到相同的值兩次? –

回答

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 
+0

作爲合併存儲過程掃描所有值只有一次..hence用戶定義函數只調用一次..Pattern將相同的所有行,我插入...我需要不同的模式爲每一行..... –

相關問題