powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Анализ базы на синтаксические ошибки из командной строки
2 сообщений из 27, страница 2 из 2
Анализ базы на синтаксические ошибки из командной строки
    #40031171
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ennor Tiegael,

авторНеудобно, я видел как выглядит данный процесс, деплой базы занимает целый день.

инкрементный деплой базы занимает несколько минут

авторТакая ситуация: допустим вы добавили новое поле в таблицу. Как ваша тулза будет генерить change script - через drop / create, что ли? Или вы храните не единственный create table, а всю цепочку альтеров в скрипте создания таблицы? Представляю, как будет выглядеть такой скрипт после добавления пары десятков столбцов.
у нас не хранятся таблицы, поэтому они меняются в пре деплой скрипте. скрипты привязываются к релизам.

авторТакже не очень понял, что именно вы называете пре- и пост-деплоями. В SSDT это есть, но они работают только при развертывании через publish profile, а Schema Compare их игнорирует. Что вы туда собираетесь помещать такого, чтоб прям каждый раз выполнять надо было?
изменения таблиц в пре деплое и изменение данных в постдеплое.

Вобщем, буду посмотреть SSDT на новогодние каникулы
...
Рейтинг: 0 / 0
Анализ базы на синтаксические ошибки из командной строки
    #40031232
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zelius
изменения таблиц в пре деплое и изменение данных в постдеплое.
В случае SSDT необходимость в вашем "пре-деплое" исчезнет, студия сама сгенерит нужный change script.

Изменение данных - вы имеете в виду обновление справочников, что ли? Я их храню непосредственно в базе, в отдельной группе хранимых процедур. Ну например:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
create procedure dbo.init_security
(
	@Error int = null output,
	@Message nvarchar(2048) = null output
) as

/*
Initialises security-related lookup tables.



20200616, RFW - Reworked access level types, only OWNER is left
	It is unclear how we can get them, and from where. GP doesn't seem to distinguish between them.
20200605, RFW - dbo.AccessFlags renamed to dbo.AccessTypes
	and is now referenced by dbo.AccessLevels. Bit masks are gove, replaced with FK
20200603, RFW - initial release
*/

set nocount, quoted_identifier, ansi_nulls, ansi_warnings, ansi_padding, concat_null_yields_null, arithabort, xact_abort on;
set implicit_transactions, numeric_roundabort off;


declare @XTran bit = cast(sign(@@trancount) as bit);

begin try

if @XTran = 0
	begin tran;


-- Securable types
declare @SecTypes table (
  Code varchar(50) primary key,
  Title varchar(50) not null
);

insert into @SecTypes (Code, Title)
values
  ('EXECUTIVE', 'Executive Group'),
  ('PROGRAM', 'Program'),
  ('BU', 'Business Unit'),
  ('CC', 'Cost Centre'),
  ('CC_SPF', 'Cost Centre (SPF)'),
  ('ACCOUNT', 'Account');


-- IsActive is default on insert, and unchanged on update
merge dbo.SecurableTypes t
using @SecTypes s
on s.Code = t.Code
when not matched by target then
	insert (Code, [Title])
	values (s.Code, s.[Title])
when matched then
	update set Title = s.Title;


-- Access types
declare @af table (
	Code varchar(50) primary key,
	Title varchar(100) not null
);

insert into @af (Code, Title)
values
	('OWNER', 'Manager');
	--('APPROVER_SECONDARY', 'Secondary approver'),
	--('REVIEWER', 'Reviewer');


merge into dbo.AccessTypes t
using @af s on s.Code = t.Code
when not matched by target then
	insert ([code], [Title])
	values ([s].[code], [s].[Title])
when matched then
	update set Title = s.Title;



if @XTran = 0
	commit;

end try
begin catch

if nullif(@Error, 0) is null
	select @Error = error_number(), @Message = error_message();

if @@trancount > 0 and @XTran = 0
	rollback;

end catch;
return;
go

Также создается "корневая" хранимка, обычно dbo.init_database, из которой вызываются все остальные процедуры инициализации в нужном порядке. Ее вызов можно включить в пост-деплой, и при выкладывании изменений через publish profile ее вызов будет включен в конец change script. Ну или всегда можно ее руками вызвать. В этом случае пост-деплой у вас становится статическим и практически не зависящим от релиза БД.
...
Рейтинг: 0 / 0
2 сообщений из 27, страница 2 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Анализ базы на синтаксические ошибки из командной строки
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]