我試圖創建一個包含merge
語句的存儲過程。我希望merge
語句能夠使用變量@TargetTable
作爲目標,但它要求我提供一個表變量。這是我的代碼:如何在SQL Server中使用變量創建MERGE語句
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語句,然後執行代表語句的字符串 –