J'ai créé une procédure pour l'un de nos développeurs .Net où ils peuvent transmettre des valeurs qui vont ensuite générer et sortir un ensemble de résultats. Une partie des paramètres qu'ils passent déterminera quelle table sera appelée. Ma question est de savoir comment puis-je m'assurer que l'instruction sql dynamique que je suis en train de créer sera mise en cache pour une exécution plus rapide? Aucun des exemples de cache que j'ai lus ne traitait de noms de tables dynamiques (peut-être juste négligés), seulement des paramètres dynamiques dans la requête.SQL Server 2008 - Cache Dynamic SQL
J'utilise sp_executesql et je passe des paramètres, mais je ne suis pas sûr de savoir comment utiliser cette méthode pour dériver le nom de la table sans ajouter le paramètre à l'instruction select?
Voici un exemple simple de la façon dont je construis actuellement la chaîne pour générer mon jeu de résultats.
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[DynamicSQL]') AND type in (N'U'))
DROP TABLE [dbo].[DynamicSQL]
GO
CREATE TABLE [dbo].[DynamicSQL](
[ID] [int] IDENTITY(1,1) NOT NULL,
[TestName] [varchar](100) NULL
) ON [PRIMARY]
GO
Insert Into DynamicSQL
Values('Name1');
Insert Into DynamicSQL
Values('Name2');
Insert Into DynamicSQL
Values('Name3');
Insert Into DynamicSQL
Values('Name4');
GO
DECLARE @TableName VARCHAR(50),
@SQL NVARCHAR(500)
SELECT @TableName = 'DynamicSQL',
@SQL = 'Select *
From ' + @TableName;
execute sp_executesql @SQL;
Toute information est grandement appréciée.
-S-
Merci pour l'info Thomas je l'apprécie. – scarpacci
Sans compter que lorsqu'il y a du SQL dynamique, il y a presque toujours une chance pour les attaques par injection SQL. – StingyJack