Я пытаюсь создать хранимую процедуру, содержащую оператор merge
. Я хочу, чтобы оператор merge
мог использовать переменную @TargetTable
в качестве цели, но он просит меня использовать переменную таблицы. Это мой код:Как создать оператор MERGE с переменной в SQL Server
CREATE PROCEDURE dbo.mergetable
(
@TargetTable nvarchar(255)
)
AS
SET NOCOUNT ON
BEGIN
MERGE INTO @TargetTable AS t
USING dbo.SOURCE_TABLE AS s
ON t.name = s.name
WHEN MATCHED AND (t.record != s.record) THEN
--Row exists and data is different
UPDATE SET t.record= s.record
WHEN NOT MATCHED BY TARGET THEN
--Row exists in source but not in target
INSERT (name, record)
VALUES (s.name, s.record)
WHEN NOT MATCHED BY SOURCE THEN
--Row exists in target but not in source
DELETE
OUTPUT $action as ACTION,
DELETED.name AS Targetname,
DELETED.record AS Targetrecord,
INSERTED.name AS Sourcename,
INSERTED.record AS Sourcerecord,
SELECT @@ROWCOUNT;
END
Я попытался с помощью табличного переменного, передавая @TargetTable
в качестве одного из данных и подумал, что можно использовать @TargetTable
из временной таблицы, но я понятия не имею, как писать код
DECLARE @temp TABLE(temp varchar(50));
INSERT @temp VALUES(@TargetTable)
Я видел только примеры, указывающие таблицу целей, но не как переменные.
Есть ли способ сделать это?
Заранее благодарен
Вы не можете параметризуем названия таблицы (или столбец), которые будут использоваться в T-SQL заявление. Если вы должны это сделать, вам нужно использовать * динамический SQL * для создания инструкции T-SQL внутри вашей хранимой процедуры в виде строки, а затем выполнить эту строку, представляющую оператор –