Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Можно ли процедуре которая возвращает набор колонок (типа отчет), указать перечень колонок  [new]
kolyady
Member

Откуда:
Сообщений: 137
Тобиш процедура возвращает например 5 колонок , а мне нужна только 1 из них. Могули я перед вставкой во времянку указать что не 5 а 1 колонку вставить?
7 авг 18, 16:01    [21633086]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли процедуре которая возвращает набор колонок (типа отчет), указать перечень колонок  [new]
uaggster
Member

Откуда:
Сообщений: 770
kolyady, можно. Через динамический sql.
Но учти, это чревато инъекциями.
7 авг 18, 16:08    [21633095]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли процедуре которая возвращает набор колонок (типа отчет), указать перечень колонок  [new]
kolyady
Member

Откуда:
Сообщений: 137
uaggster,
скиньте ссылку на пример или визуализируйте как нибудь, буду благодарен
7 авг 18, 16:41    [21633143]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли процедуре которая возвращает набор колонок (типа отчет), указать перечень колонок  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
kolyady,

drop proc if exists dbo.DynamicSP 
go

drop type if exists dbo.tvpColumnsList
go

create type dbo.tvpColumnsList as table (
	ColumnName nvarchar(128) primary key
)
go

create proc dbo.DynamicSP 
	@ColumnList dbo.tvpColumnsList readonly
as 
	set nocount on; 

	declare @ColumnsListStr nvarchar(max) = ( 
		select ', ' + ColumnName 
		from @ColumnList 
		where ColumnName in ( 
			-- боишся инъекций, перечисли все возможные столбцы тут
			'Col1', 'Col2', 'Col3' --, ...
		)
		for xml path('')
	)

	declare @Cmd nvarchar(max) = N'	
		select id ' + @ColumnsListStr + '
		from dbo.tableName
	'

	print @Cmd

	exec sys.sp_executesql @Cmd, N' -- параметры если необходимо '

go

--вызов
declare @ColumnList dbo.tvpColumnsList
insert into @ColumnList ( ColumnName )
values ('Col1'), ('Col3')
exec dbo.DynamicSP @ColumnList = @ColumnList
7 авг 18, 17:02    [21633169]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли процедуре которая возвращает набор колонок (типа отчет), указать перечень колонок  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
Вообще задачу бы полностью описали.
Мне кажется вам в место процедуры достаточно функцию заюзать и выбирать необходимые столбцы.
И еще если будете делать фунцию, делайте инлайн по возможности.
7 авг 18, 17:03    [21633173]     Ответить | Цитировать Сообщить модератору
 Re: Можно ли процедуре которая возвращает набор колонок (типа отчет), указать перечень колонок  [new]
L_argo
Member

Откуда:
Сообщений: 1140
Динамич. СКЛ необязателен.
Можно просто по IF выдавать разные select * INTO xxx. При условии, что времянка не нужна для чтения снаружи.

Это не очень хорошая практика.
7 авг 18, 17:58    [21633255]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить