Sur SQL Server 2008+, il est possible d'utiliser les paramètres de table pour transmettre une variable de table à une instruction SQL dynamique tant que vous n'avez pas besoin de mettre à jour les valeurs dans la table elle-même.
Donc, à partir du code que vous avez publié, vous pouvez utiliser cette approche pour @TSku mais pas pour @RelPro
Exemple de syntaxe ci-dessous.
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',
@example@sqldat.com
Le physloc colonne est incluse juste pour démontrer que la variable de table référencée dans la portée enfant est définitivement la même que la portée externe plutôt qu'une copie.