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',
@[email protected]
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.