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

Откуда:
Сообщений: 2662
Скажите пожалуйста,
я создал тип данных

CREATE TYPE dbo.EmployeeList
AS TABLE
(
  EmployeeID INT
);


как мне теперь привести данные к этому типу, чтобы передать их в хранимую процедуру?

exec [dbo].[GetSummaryReport] cast('00072' as EmployeeList),'20150501','20150601'


Заранее благодарен.
18 сен 15, 16:18    [18166615]     Ответить | Цитировать Сообщить модератору
 Re: Приведение к пользовательскому типу данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
exec [dbo].[GetSummaryReport] cast('00072' as int),'20150501','20150601'
18 сен 15, 16:22    [18166631]     Ответить | Цитировать Сообщить модератору
 Re: Приведение к пользовательскому типу данных  [new]
vah
Member

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

а если несколько значений (массив)?
18 сен 15, 16:24    [18166650]     Ответить | Цитировать Сообщить модератору
 Re: Приведение к пользовательскому типу данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
массив вроде бы нельзя
18 сен 15, 16:25    [18166655]     Ответить | Цитировать Сообщить модератору
 Re: Приведение к пользовательскому типу данных  [new]
=-Гость=-
Guest
Konst_One,


--Создаем
create procedure [dbo].[GetSummaryReport]
@EmployeeList EmployeeList READPNLY,
...
as
select * from @EmployeeList
go

-- Выполняем
declare @EmployeeList EmployeeList
exec [dbo].[GetSummaryReport] @EmployeeList = @EmployeeList ...
go
18 сен 15, 16:31    [18166726]     Ответить | Цитировать Сообщить модератору
 Re: Приведение к пользовательскому типу данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
мне такое не надо, вы ТС пишите. чтобы он потом огёб проблем с таким кодом
18 сен 15, 16:33    [18166743]     Ответить | Цитировать Сообщить модератору
 Re: Приведение к пользовательскому типу данных  [new]
=-Гость=-
Guest
Konst_One,

Извини, кнопку "ответить" нажад не ту, надо было ТС ответить

а код нормальный, рабочий.
18 сен 15, 16:36    [18166768]     Ответить | Цитировать Сообщить модератору
 Re: Приведение к пользовательскому типу данных  [new]
Konst_One
Member

Откуда:
Сообщений: 11538
да, код рабочий, но подойдёт ли он ТС, ему решать.

msdn говорит:

Ограничения
Возвращающие табличные значения параметры имеют следующие ограничения:
  • SQL Server не ведет статистику столбцов возвращающих табличные значения параметров.
  • Возвращающие табличные значения параметры должны передаваться процедурам Transact-SQL как входные параметры типа READONLY. Над возвращающими табличные значения параметрами, находящимися в теле процедуры, нельзя выполнять операции DML, такие как UPDATE, DELETE или INSERT.
  • Возвращающий табличное значение параметр не может быть использован в качестве цели для инструкции SELECT INTO или INSERT EXEC. Возвращающий табличное значение параметр может присутствовать в предложении FROM инструкции SELECT INTO, в строке или хранимой процедуре INSERT EXEC.
  • 18 сен 15, 16:40    [18166799]     Ответить | Цитировать Сообщить модератору
     Re: Приведение к пользовательскому типу данных  [new]
    Konst_One
    Member

    Откуда:
    Сообщений: 11538
    https://msdn.microsoft.com/ru-ru/library/bb510489(v=sql.120).aspx
    18 сен 15, 16:41    [18166809]     Ответить | Цитировать Сообщить модератору
     Re: Приведение к пользовательскому типу данных  [new]
    =-Гость=-
    Guest
    Konst_One,

    Браво! Аплодисменты!
    18 сен 15, 16:43    [18166828]     Ответить | Цитировать Сообщить модератору
     Re: Приведение к пользовательскому типу данных  [new]
    o-o
    Guest
    CREATE TYPE dbo.EmployeeList
    AS TABLE
    (
      EmployeeID INT
    );
    go
    
    --exec [dbo].[GetSummaryReport] cast('00072' as EmployeeList),'20150501','20150601'
    
    create table dbo.t (id int, name sysname);
    insert into dbo.t values (1, 'Vasja'), (2, 'Petja'), (3, 'Kolja');
    go
    
    create procedure GetSummaryReport @list EmployeeList readonly as
       select *
       from   dbo.t
       where  id in (select EmployeeID from @list);
    go   
       
       
    declare @mylist EmployeeList
    insert @mylist(EmployeeID) values(1),(3);
    
    exec GetSummaryReport @mylist;
    ---
    id	name
    1	Vasja
    3	Kolja  
    
    18 сен 15, 16:49    [18166866]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить