Я создал процедуру для одного из наших .Net Devs, где они могут передавать значения, которые затем будут строить и выводить набор результатов. Часть параметров, которые они передают, определит, какая таблица вызывается. Мой вопрос в том, как я могу гарантировать, что динамический SQL-запрос, который я создаю, будет кэшироваться для более быстрого выполнения? Ни один из примеров кэша, которые я прочитал, не обсуждал динамические имена таблиц (возможно, они просто не учитывались), просто динамические параметры в запросе.SQL Server 2008 - Cache Dynamic SQL
Я использую sp_executesql и передаю в params, но я не уверен, как использовать этот метод для получения имени таблицы без добавления параметра в инструкцию select?
Вот простой пример того, как я в настоящее время строю строку для создания моего набора результатов.
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;
Любая информация с благодарностью.
-S
Спасибо за информацию Томас Я ценю это. – scarpacci
Не говоря уже о том, что при наличии динамического SQL почти всегда есть вероятность для SQL-инъекций. – StingyJack