Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie verwende ich eine Tabellenvariable in einer dynamischen SQL-Anweisung?

Auf SQL Server 2008+ ist es möglich, Tabellenwertparameter zu verwenden, um eine Tabellenvariable an eine dynamische SQL-Anweisung zu übergeben, solange Sie die Werte in der Tabelle selbst nicht aktualisieren müssen.

Aus dem von Ihnen geposteten Code könnten Sie diesen Ansatz also für @TSku verwenden aber nicht für @RelPro

Beispielsyntax unten.

CREATE TYPE MyTable AS TABLE 
( 
Foo int,
Bar int
);
GO


DECLARE @T AS MyTable;

INSERT INTO @T VALUES (1,2), (2,3)

SELECT *,
        sys.fn_PhysLocFormatter(%%physloc%%) AS [physloc]
FROM @T

EXEC sp_executesql
  N'SELECT *,
        sys.fn_PhysLocFormatter(%%physloc%%) AS [physloc]
    FROM @T',
  N'@T MyTable READONLY',
  @[email protected] 

Der physloc Spalte wird nur eingefügt, um zu demonstrieren, dass die Tabellenvariable, auf die im untergeordneten Gültigkeitsbereich verwiesen wird, definitiv dieselbe ist wie der äußere Gültigkeitsbereich und keine Kopie.