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

Откуда: Москва
Сообщений: 59
Выполняю следующий запрос:
ALTER TABLE dbo.[common_type] SWITCH TO dbo.[common_type_temp];


Но получаю ошибку:
Не удалось выполнить инструкцию ALTER TABLE SWITCH. Предложение SWITCH не допускается, так как исходная таблица "dbo.common_type" содержит первичный ключ для ограничения "FK$common_type_C".

Никак не могу понять что это означает. Вроде все ограничения которые ссылаются на эту таблицу отключил.
Как можно узнать что еще мешает?
17 окт 12, 13:51    [13333612]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при ALTER TABLE SWITCH  [new]
trew
Member

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

На таблице, правой кнопкой - Script Table as - Create to - New Query
17 окт 12, 14:16    [13333922]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при ALTER TABLE SWITCH  [new]
офигеть
Guest
trew,
и шо, оно заскриптует ссылающихся на?

select TABLE_SCHEMA, TABLE_NAME
from INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE
where CONSTRAINT_NAME = 'FK$common_type_C'
17 окт 12, 14:31    [13334113]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при ALTER TABLE SWITCH  [new]
зомби зомби зомби
Member

Откуда: из Жужеля!
Сообщений: 7437
SELECT FK=OBJECT_NAME(object_id),tbl=OBJECT_NAME(referenced_object_id),parent_table=OBJECT_NAME(parent_object_id)
FROM sys.foreign_keys
WHERE name='FK$common_type_C'
17 окт 12, 14:37    [13334199]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при ALTER TABLE SWITCH  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Нафига темы плодить?
Ясно же написано было:
-- Disable constraint checking on the referecing tables
ALTER TABLE dbo.Child1 NOCHECK CONSTRAINT FK_C1_P;
ALTER TABLE dbo.Child2 NOCHECK CONSTRAINT FK_C2_P;

-- Can switch, truncate, and switch back
ALTER TABLE dbo.Parent SWITCH TO dbo.Workspace;
TRUNCATE TABLE dbo.Workspace;
ALTER TABLE dbo.Workspace SWITCH TO dbo.Parent;
17 окт 12, 18:24    [13336174]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при ALTER TABLE SWITCH  [new]
QwerTech
Member

Откуда: Москва
Сообщений: 59
Mnior,
Ну здесь мне конкретно непонятно было как работает SWITCH. К старой теме он немного не подходит. Считаю что лучше создавать отдельную тему. Имхо дело вкуса.
Если администратор сочтет нужным пусть удалит тему.

Выполнил следующий запрос:
SELECT FK=OBJECT_NAME(object_id),tbl=OBJECT_NAME(referenced_object_id),parent_table=OBJECT_NAME(parent_object_id)
FROM sys.foreign_keys
WHERE OBJECT_NAME(referenced_object_id)='common_type'

Вот результат:
FKtblparent_table
FK$common_type_Ccommon_typecommon_type_C
FK$common_type_RScommon_typecommon_type_RS
FK$common_type_Pcommon_typecommon_type_P
FK_common_type_Pcommon_typecommon_type_P
FK_common_type_H_MAINcommon_typecommon_type_H
FK_common_type_I_MAINcommon_typecommon_type_I

Зависимости смотрел через Microsoft SQL Server Management Studio. Поэтому в следующем скрипте есть лишние.

Вот весь скрипт который выполняю:
-- Disable constraint checking on the referecing tables
ALTER TABLE dbo.common_type_C NOCHECK CONSTRAINT FK_common_type_C;
ALTER TABLE dbo.common_type_C NOCHECK CONSTRAINT  FK$common_type_C;
ALTER TABLE dbo.[common_type_H] NOCHECK CONSTRAINT FK_common_type_H_MAIN;
ALTER TABLE dbo.[common_type_I] NOCHECK CONSTRAINT FK_common_type_I_MAIN;
ALTER TABLE dbo.[common_type_P] NOCHECK CONSTRAINT FK_common_type_P;
ALTER TABLE dbo.[common_type_RS] NOCHECK CONSTRAINT FK_common_type_RS;
ALTER TABLE dbo.[common_type_V] NOCHECK CONSTRAINT FK_common_type_V_H;

-- Can switch, truncate, and switch back

CREATE TABLE [dbo].[ _common_type_temp](
	[ObjectID] [uniqueidentifier] NOT NULL,
	[ts] [bigint] NOT NULL,
	[MagicBit] [tinyint] NOT NULL,
	[ID_DECL] [int] NULL,
	[G021_DECL] [varchar](20) NULL,
	[G022_DECL] [varchar](150) NULL,
	[G023_DECL] [varchar](80) NULL,
	[G081_DECL] [varchar](20) NULL,
	[G0822_DECL] [varchar](150) NULL,
	[G083_DECL] [varchar](80) NULL,
	[GD0_DECL] [varchar](20) NULL,
	[ID_DOBLIST] [int] NULL,
	[G011_DOBLIST] [varchar](20) NULL,
	[G31_1_DOBLIST] [varchar](250) NULL,
	[G31_11_DOBLIST] [varchar](150) NULL,
	[G31_7_DOBLIST] [money] NULL,
	[G31_71_DOBLIST] [varchar](13) NULL,
	[G33_DOBLIST] [varchar](100) NULL,
	[G38_DOBLIST] [money] NULL,
	[G42_DOBLIST] [money] NULL,
	[G46_DOBLIST] [money] NULL,
	[GD0_DOBLIST] [varchar](20) NULL,
	[DSTAT_DOBLIST] [datetime] NULL,
	[d41e9bfdaa8_CreationDate] [datetime] NULL,
	[d41e9bfdaa8_IsNotConsistent] [tinyint] NULL,
	[d41e9bfdaa8_IsNotConsPart] [tinyint] NULL,
	[d41e9bfdaa8_Duplicate] [tinyint] NULL,
	[d41e9bfdaa8_CoordinationStatus] [tinyint] NULL,
	[KOD_STR_DOBLIST] [varchar](20) NULL,
	[STAT_DECL] [smallint] NULL,
 CONSTRAINT [PK_common_type_temp] PRIMARY KEY CLUSTERED 
(
	[ObjectID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

	
ALTER TABLE dbo.[common_type] SWITCH TO dbo.[common_type_temp];
TRUNCATE TABLE dbo.[common_type_temp];
drop table [dbo].[common_type_temp];

-- Success
ALTER TABLE dbo.common_type_V WITH CHECK CHECK CONSTRAINT FK_common_type_V_H;
ALTER TABLE dbo.common_type_C WITH CHECK CHECK CONSTRAINT FK_common_type_C;
ALTER TABLE dbo.[common_type_H] WITH CHECK CHECK CONSTRAINT FK_common_type_H_MAIN;
ALTER TABLE dbo.[common_type_I] WITH CHECK CHECK CONSTRAINT FK_common_type_I_MAIN;
ALTER TABLE dbo.[common_type_P] WITH CHECK CHECK CONSTRAINT FK_common_type_P;
ALTER TABLE dbo.[common_type_RS] WITH CHECK CHECK CONSTRAINT FK_common_type_RS;
17 окт 12, 22:05    [13337136]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при ALTER TABLE SWITCH  [new]
QwerTech
Member

Откуда: Москва
Сообщений: 59
зомби зомби зомби
SELECT FK=OBJECT_NAME(object_id),tbl=OBJECT_NAME(referenced_object_id),parent_table=OBJECT_NAME(parent_object_id)
FROM sys.foreign_keys
WHERE name='FK$common_type_C'


Вот:

FKtblparent_table
FK$common_type_Ccommon_typecommon_type_C
17 окт 12, 22:08    [13337147]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при ALTER TABLE SWITCH  [new]
а еще раз?
Guest
ALTER TABLE dbo.common_type_C NOCHECK CONSTRAINT  FK$common_type_C;

SELECT FK=OBJECT_NAME(object_id),
      tbl=OBJECT_NAME(referenced_object_id),
      parent_table=OBJECT_NAME(parent_object_id),
      is_disabled
FROM sys.foreign_keys
WHERE name='FK$common_type_C'
18 окт 12, 13:46    [13340348]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при ALTER TABLE SWITCH  [new]
QwerTech
Member

Откуда: Москва
Сообщений: 59
ALTER TABLE dbo.common_type_C NOCHECK CONSTRAINT  FK$common_type_C;

SELECT FK=OBJECT_NAME(object_id),
      tbl=OBJECT_NAME(referenced_object_id),
      parent_table=OBJECT_NAME(parent_object_id),
      is_disabled
FROM sys.foreign_keys
WHERE name='FK$fas_common_type_C'

FKtblparent_tableis_disabled
FK$common_type_Ccommon_typecommon_type_C1
19 окт 12, 16:55    [13348062]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при ALTER TABLE SWITCH  [new]
а еще раз?
Guest
1. показания не сходятся: WHERE name='FK$fas_common_type_C'
2. ну так disabled = 1.
SWITCH-то пробовали снова выполнить?
19 окт 12, 18:11    [13348393]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при ALTER TABLE SWITCH  [new]
QwerTech
Member

Откуда: Москва
Сообщений: 59
В общем разобрался.

Проблема была в том что СУБД пишет не правильную отладочную информацию.

Но при помощи следующего запроса смог отключить все ограничения и все сразу заработало:
SELECT FK=OBJECT_NAME(object_id),
      tbl=OBJECT_NAME(referenced_object_id),
      parent_table=OBJECT_NAME(parent_object_id),
      is_disabled
      
FROM sys.foreign_keys
WHERE OBJECT_NAME(referenced_object_id) = 'common_type'


Всем огромное спасибо!
24 окт 12, 22:13    [13371319]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить