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

Откуда: Москва
Сообщений: 1176
День добрый!

как вы называете типы табличных параметров?

1. В идеале для каждой процедуры можно создавать отдельный тип с префиксом от имени процы. Но при этом о повторном использовании можно забыть

2. Обобщенные имена под каждую комбинацию.
"Int_Guid_varchar" и прочее + еще сюда вопрос про допустимость NULL
12 май 16, 13:51    [19163631]     Ответить | Цитировать Сообщить модератору
 Re: TVP как называть?  [new]
aleks2
Guest
Где ты их "повторно" использовать собрался?
А ну, как изменить определение приспичит. Ты подумал об ЭТОМ?
12 май 16, 14:00    [19163696]     Ответить | Цитировать Сообщить модератору
 Re: TVP как называть?  [new]
Владислав Колосов
Member

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

табличные типы - это геморрой на всю опу. Советую сразу их удалить и переписать код. Даже умея готовить получается несъедобный продукт.
12 май 16, 14:36    [19163932]     Ответить | Цитировать Сообщить модератору
 Re: TVP как называть?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6116
Владислав Колосов
Mike_za,

табличные типы - это геморрой на всю опу. Советую сразу их удалить и переписать код. Даже умея готовить получается несъедобный продукт.

Табличные типы - это более чем оптимальное решение в случае, если с клиента на сервер надо передать массив данных. Варианты с XML или строк с разделителями на порядок тормознутее и невнятнее. Использую TVP уже достаточно давно, продукт вполне съедобен.
12 май 16, 15:12    [19164227]     Ответить | Цитировать Сообщить модератору
 Re: TVP как называть?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Сон Веры Павловны
Владислав Колосов
Mike_za,

табличные типы - это геморрой на всю опу. Советую сразу их удалить и переписать код. Даже умея готовить получается несъедобный продукт.

Табличные типы - это более чем оптимальное решение в случае, если с клиента на сервер надо передать массив данных. Варианты с XML или строк с разделителями на порядок тормознутее и невнятнее. Использую TVP уже достаточно давно, продукт вполне съедобен.


какие соглашения об именовании используете?
12 май 16, 15:15    [19164259]     Ответить | Цитировать Сообщить модератору
 Re: TVP как называть?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6116
Mike_za
какие соглашения об именовании используете?

Аналогично таблицам (с аналогичным разделением по схемам).
12 май 16, 15:19    [19164302]     Ответить | Цитировать Сообщить модератору
 Re: TVP как называть?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Сон Веры Павловны,

одинаковая структура нужна в нескольких процедурах.
делаете один тип?
12 май 16, 15:39    [19164472]     Ответить | Цитировать Сообщить модератору
 Re: TVP как называть?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6116
Mike_za
Сон Веры Павловны,

одинаковая структура нужна в нескольких процедурах.
делаете один тип?

Если (в терминах DDD) домен один (одна программа, одна предметная область) - то один, если разные - то разные, даже если совпадает структура.
12 май 16, 15:51    [19164585]     Ответить | Цитировать Сообщить модератору
 Re: TVP как называть?  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
Mike_za,

В табличных типах нет ничего плохого. Вполне можно пользоваться как со стороны клиента, так и на стороне сервера.

Более того, можно даже не пересоздавать зависимые модули, если требуется изменить определение такого типа:
+
use tempdb;
go

create type dbo.tTable as table
(
 id int
);
go

create procedure dbo.spTest
 @t dbo.tTable readonly
as
begin
 select * from @t;
end;
go

create function dbo.fnTest
(
 @t dbo.tTable readonly
)
returns table
as
return (select * from @t);
go

create procedure dbo.spTest2
as
begin
 declare @t dbo.tTable;
 select * from @t;
end;
go

declare @v dbo.tTable;
exec dbo.spTest @v;
select * from dbo.fnTest(@v);
go

create type dbo.tTableNew as table
(
 id int,
 v int
);
go

exec sp_rename 'dbo.tTable', 'tTableOld';
exec sp_rename 'dbo.tTableNew', 'tTable';
go

declare @s varchar(max);

select @s = (
 select
  'exec sp_refreshsqlmodule ' + quotename(quotename(referencing_schema_name) + '.' + quotename(referencing_entity_name), '''') + '; '
 from
  sys.dm_sql_referencing_entities('dbo.tTable', 'type')
 for xml path(''), type
).value('.', 'varchar(max)');
exec(@s);
go

drop type dbo.tTableOld;
go

declare @v dbo.tTable;
exec dbo.spTest @v;
exec dbo.spTest2;
select * from dbo.fnTest(@v);
go

drop procedure dbo.spTest, dbo.spTest2;
drop function dbo.fnTest;
drop type dbo.tTable;
go
12 май 16, 16:08    [19164737]     Ответить | Цитировать Сообщить модератору
 Re: TVP как называть?  [new]
Владислав Колосов
Member

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

не буду спорить, но сопровождать и оптимизировать всё это на развивающемся проекте очень неприятно и затратно по времени. Мое личное мнение.
12 май 16, 17:27    [19165321]     Ответить | Цитировать Сообщить модератору
 Re: TVP как называть?  [new]
invm
Member

Откуда: Москва
Сообщений: 9633
Владислав Колосов,

Если применение табличных типов с точки зрения архитектуры и производительности оптимальнее других способов, то никого не должно волновать приятно или нет разработчику с ними работать.
Тем более, что это субъективное понятие.
12 май 16, 18:08    [19165538]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить