我需要爲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
請幫我出這一點。提前致謝。
而不是使用sourceTable會爲s'的','使用使用(選擇COL1,COL2,dbo.UserDefiendFunction(@ parama1)從sourceTable會模式)爲s' –
@ Nick.McDermaid我有你的方法試過用戶定義的函數返回所有我插入的行相同的模式..原因是用戶定義函數只被調用一次...它會違反插入過程中的主鍵約束...它不會工作.. –
你是說這對於兩次調用與@ parama1相同的值的UDF,你總是會得到不同的值,你永遠不會得到相同的值兩次? –