Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MSSQL: Не включить отслеживание изменений данных без существующего primary key #131

Open
KittyNicky opened this issue Dec 7, 2023 · 2 comments

Comments

@KittyNicky
Copy link

KittyNicky commented Dec 7, 2023

Проблема: существует таблица на одном сервере, у которой включено отслеживание изменений данных (ENABLE CHANGE_TRACKING). Необходимо накатить таблицу на другой сервер.

Исходная таблица:

CREATE TABLE [dbo].[test_table](
	[id] [int] NOT NULL IDENTITY (1,1),
	[name] [nvarchar] (100) COLLATE Cyrillic_General_CI_AS NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[test_table] ENABLE CHANGE_TRACKING WITH (TRACK_COLUMNS_UPDATED = OFF)
GO

--------------------------------------------------------------------------------

CREATE NONCLUSTERED INDEX [IX_test_table_name] ON [dbo].[test_table] ([name])
ON [PRIMARY]
GO

--------------------------------------------------------------------------------

ALTER TABLE [dbo].[test_table]
	ADD CONSTRAINT [PK_test_table] PRIMARY KEY CLUSTERED  ([id]) ON [PRIMARY]
GO

Скрипт, формируемый pgCodeKeeper при сравнении:

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE TABLE [dbo].[test_table](
	[id] [int] NOT NULL IDENTITY (1,1),
	[name] [nvarchar] (100) COLLATE Cyrillic_General_CI_AS NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[test_table] ENABLE CHANGE_TRACKING WITH (TRACK_COLUMNS_UPDATED = OFF)
GO

CREATE NONCLUSTERED INDEX [IX_test_table_name] ON [dbo].[test_table] ([name])
ON [PRIMARY]
GO

ALTER TABLE [dbo].[test_table]
	ADD CONSTRAINT [PK_test_table] PRIMARY KEY CLUSTERED  ([id]) ON [PRIMARY]
GO

Ошибки при выполнении скрипта:
Сообщение 4997, уровень 16, состояние 1, строка 14
Не удается включить отслеживание изменений для таблицы "test_table". Для отслеживания изменений в таблице необходим первичный ключ. Перед включением отслеживания изменений в таблице создайте первичный ключ.
Сообщение 1088, уровень 16, состояние 12, строка 17
Не удалось найти объект "dbo.test_table", так как он не существует, или отсутствуют разрешения.
Сообщение 4902, уровень 16, состояние 1, строка 21
Не удалось найти объект "dbo.test_table", так как он не существует, или отсутствуют разрешения.

@KittyNicky
Copy link
Author

Привет!
Еще один кейс, связанный с CHANGE_TRACKING.

Не удалить таблицу, для которой включено отслеживание изменения данных (ENABLE CHANGE_TRACKING).

CREATE TABLE [dbo].[DriverChecksRequestLog](
	[Id] [uniqueidentifier] ROWGUIDCOL NOT NULL CONSTRAINT [DF_DriverChecksRequestLog_Id] DEFAULT (newsequentialid()),
	[Checker] [int] NOT NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

ALTER TABLE [dbo].[DriverChecksRequestLog] ENABLE CHANGE_TRACKING WITH (TRACK_COLUMNS_UPDATED = OFF)
GO

--------------------------------------------------------------------------------

ALTER TABLE [dbo].[DriverChecksRequestLog]
	ADD CONSTRAINT [PK_DriverChecksRequestLog_Id] PRIMARY KEY CLUSTERED  ([Id]) ON [PRIMARY]
GO

Скрипт, формируемый pgCodeKeeper на удаление таблицы:

ALTER TABLE [dbo].[DriverChecksRequestLog]
	DROP CONSTRAINT IF EXISTS [PK_DriverChecksRequestLog_Id]
GO

DROP TABLE IF EXISTS [dbo].[DriverChecksRequestLog]
GO

Ошибки при выполнении скрипта:
Сообщение 3735, уровень 16, состояние 1, строка 2
Не удается удалить ограничение первичного ключа "PK_DriverChecksRequestLog_Id" для таблицы "DriverChecksRequestLog", поскольку для этой таблицы включено отслеживание изменений. Для отслеживания изменений необходимо ограничение первичного ключа для таблицы. Перед удалением ограничения отключите отслеживание изменений.
Сообщение 3727, уровень 16, состояние 0, строка 2
Нельзя удалить ограничение. См. предыдущие ошибки.

@AXEPOH подскажи плз, завести отдельной задачей или приложением достаточно?

@AXEPOH
Copy link
Contributor

AXEPOH commented Feb 20, 2024

@KittyNicky так достаточно, по сути та же проблема

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants