På SQL Server 2008+ är det möjligt att använda Table Valued Parameters för att skicka in en tabellvariabel till en dynamisk SQL-sats så länge du inte behöver uppdatera värdena i själva tabellen.
Så från koden du postade kan du använda den här metoden för @TSku
men inte för @RelPro
Exempel på syntax nedan.
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]
physloc
kolumnen ingår bara för att visa att tabellvariabeln som refereras till i det underordnade omfånget definitivt är samma som det yttre omfånget snarare än en kopia.