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

Откуда:
Сообщений: 329
задумал сделать фильтр таблицы, затем оформить его в качестве функции:
declare @Field1 varchar(100) = 'Value1'
declare @Field2 varchar(100) = 'Value2'
declare @Field2 varchar(100) = null
declare @Cmd varchar(max) = 'select top 100 [Field0],[Field1],[Field2],[Field3] from [Table]'
declare @Stmt varchar(max) = ''

if(@Field1 is not null) set @Stmt = @Stmt + ' and [Field1] like ''' + @Field1 + '%'''
if(@Field2 is not null) set @Stmt = @Stmt + ' and [Field2] like ''' + @Field2 + '%'''
if(@Field3 is not null) set @Stmt = @Stmt + ' and [Field3] like ''' + @Field3 + '%'''
if(@Stmt <> '') set @Stmt = 'where' + substring(@Stmt, 5, len(@Stmt))  --меняем первый ' and' на 'where'
exec (@Cmd + ' ' + @Stmt)

Когда стал оформлять в виде функции, столкнулся с тем, что exec не разрешён.
Как подобный фильтр реализовать в виде функции?
13 июн 16, 18:09    [19288645]     Ответить | Цитировать Сообщить модератору
 Re: фильтр таблицы как функция  [new]
=Сергей=
Member

Откуда:
Сообщений: 329
=Сергей=,
ничего я лучшего не придумал как сделать в виде процедуры... но тут другая проблема: так как использую динамическое формирование запроса, то несмотря
grant exec on [dbo].[MySP] to [MyRole]

запуск процедуры заканичвается ошибкой:
The SELECT permission was denied on the object 'Table', database 'MyDatabase', schema 'dbo'.

db chaining настроен.
Как быть?
13 июн 16, 19:09    [19288790]     Ответить | Цитировать Сообщить модератору
 Re: фильтр таблицы как функция  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
=Сергей=
Как подобный фильтр реализовать в виде функции?
create function dbo.fnGetFilteredTable
(
 @Field1 varchar(100),
 @Field2 varchar(100),
 @Field2 varchar(100)
)
returns table
as
return (
 select top 100
  [Field0],
  [Field1],
  [Field2],
  [Field3]
 from
  [Table]
 where
  (@Field1 is null or Field1 like @Field1 + '%') and
  (@Field2 is null or Field2 like @Field2 + '%') and
  (@Field3 is null or Field3 like @Field3 + '%')
);
13 июн 16, 20:23    [19288965]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить