Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment utiliser une variable de table dans une instruction sql dynamique ?

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.