Wie erstellt MERGE-Anweisung mit variable in SQL Server

Ich bin versucht, eine gespeicherte Prozedur erstellen, die enthält eine merge - Anweisung. Ich will die merge Anweisung zu können, verwenden Sie die variable @TargetTable als Ziel, aber es verlangt von mir eine table-variable. Das ist mein code:

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

Habe ich versucht, mit einer Tabelle variable übergeben @TargetTable als einer der Daten-und dachte, dass es möglich ist, verwenden Sie @TargetTable aus der temporären Tabelle, aber ich habe keine Ahnung wie ich den code schreiben

    DECLARE @temp TABLE(temp varchar(50));
    INSERT @temp VALUES(@TargetTable)

Ich habe nur gesehen, Beispiele unter Angabe der Zieltabelle aber nicht als Variablen.

Gibt es eine Möglichkeit, dies zu tun?

Vielen Dank im Voraus

Sie können nicht einstellen, die Tabelle (oder Spalte) Namen verwendet werden, die in einem T-SQL-Anweisung. Wenn Sie müssen dies tun, dann haben Sie mit dynamisches SQL zu bauen, der T-SQL-Anweisung in der gespeicherten Prozedur als string, und dann ausführen, dass der string, der die Anweisung

InformationsquelleAutor shawnl_28 | 2013-05-29

Schreibe einen Kommentar