Я пытаюсь создать инструкцию SQL, которая динамически получает имена столбцов из базы данных на основе фильтра. У нас есть таблица с примерно 50 столбцами с префиксом на каждом столбце, чтобы обозначить, к какому «установленному» он относится. Я создал запрос, который отлично работает в SQL Management Studio, но поскольку я хотел бы использовать результаты в приложении .Net, а также в веб-приложении, было бы здорово иметь хранимую процедуру или что-то подобное, что я могу назвать для результатов. Я знаю, что могу вручную указать столбцы в моем запросе, но я хотел бы попробовать и сделать это динамически, столбцы могут быть добавлены. Ниже приведен запрос, который будет лучшим способом сохранить его на моем SQL-сервере, чтобы я мог использовать его по мере необходимости?SQL Хранимая процедура с именами динамических столбцов
DECLARE @ColumnList AS Varchar(MAX)
DECLARE @StartDate as Date
DECLARE @EndDate as Date
DECLARE @DepartmentID as Varchar(10)
DECLARE @ColumnFilter as Varchar(3)
SET @StartDate = '2015-01-01'
SET @EndDate = '2015-05-01'
SET @DepartmentID = 'GMC'
SET @ColumnFilter = 'GM'
SELECT @ColumnList = COALESCE(@ColumnList, ',') + c.name+',' FROM sys.columns c
WHERE c.object_id = OBJECT_ID('tblDetails') AND c.Name LIKE @ColumnFilter + '%'
SET @ColumnList = Left(@ColumnList,Len(@ColumnList)-1)
DECLARE @Template AS Varchar(max)
SET @Template = 'SELECT [RecordID]
,[DateRecord]
,[DepartmentID]
,[Shift]
,[ShiftLength]
,[ShiftType]
,[Active]
,[Comment]
{ColumnList}
FROM [Data_Warehouse].[dbo].[tblDetails]
WHERE DateRecord >= ''{StartDate}'' AND DateRecord <= ''{EndDate}'' AND DepartmentID = ''{DepartmentID}''
ORDER BY DateRecord'
SET @Template = REPLACE(@Template, '{ColumnList}', @ColumnList)
SET @Template = REPLACE(@Template, '{StartDate}', @StartDate)
SET @Template = REPLACE(@Template, '{EndDate}', @EndDate)
SET @Template = REPLACE(@Template, '{DepartmentID}', @DepartmentID)
EXEC (@Template)
Что вы делаете с результатом в своем веб-приложении? Это отчет, который вы просто показываете для пользователей в datagrid? –
Привет, Питер, я просто показываю данные в datagrid, чтобы пользователи могли видеть и экспортировать по мере необходимости. Я могу добавить это прямо в свой .NET-код и получить результаты, но не буду иметь несколько копий кода, плавающего в разных приложениях. –