Мне нужно сделать большой объем Insert
и/или Update
для целевой таблицы в базе данных SQL. Я уже пробовал хранимую процедуру Merge. В целевой таблице у меня есть составной ключ.SQL Insert, Update using Merge Store Процедура
Мне нужно сгенерировать шаблон для первого поля (ключа) при вставке. Я попробовал пользовательскую функцию, которая возвращает ключ шаблона, который уникален для каждой из строк.
Вопрос в том, как включить эту функцию в запрос, который будет автоматически генерировать ключ и вставлять соответствующие поля для каждой записи?
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
возвращает шаблон я хочу. Вот мой User Defined Function:
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 я попробовал с вашим подходом . Определенная пользователем функция возвращает тот же шаблон для всех строк, которые я вставляю. Причина - пользовательская функция вызывается только один раз ... она будет нарушать ограничение первичного ключа во время вставки ... Это не сработает. –
Вы говорите, что для двух вызовов UDF с тем же значением @ parama1 вы всегда будете получать разные значения, и вы никогда не получите одинаковое значение дважды? –