Изменить имя схемы таблицы, но не может передать объект, связанный со схемой - PullRequest
0 голосов
/ 14 декабря 2018

Имя схемы , меню и таблица dbo.Dinner уже существует в базе данных.

Я хотел бы изменить

ОТ

dbo.Dinner

ДО

menu.Dinner

Используя этот запрос:

ALTER SCHEMA menu TRANSFER dbo.Dinner

И я получаю сообщение об ошибке:

cannot transfer a schema bound object

Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 14 декабря 2018

Как я уже прокомментировал, я подозреваю, что у вас есть по крайней мере один объект, который использует предложение WITH SCHEMABINDING в его CREATE / ALTER, и поэтому вы не можете изменить объект таблицы.Вам нужно будет DROP и воссоздать этот объект.Например:

USE Sandbox;
GO

CREATE TABLE dbo.Dinner (ID int, Meal varchar(20));
GO

CREATE VIEW dbo.Dinners WITH SCHEMABINDING AS
    SELECT DISTINCT Meal
    FROM dbo.Dinner;
GO

CREATE SCHEMA menu;
GO
ALTER SCHEMA menu TRANSFER dbo.Dinner; --Fails
GO
DROP VIEW dbo.Dinners;
GO
ALTER SCHEMA menu TRANSFER dbo.Dinner; --Succeeds
GO
CREATE VIEW dbo.Dinners WITH SCHEMABINDING AS
    SELECT DISTINCT Meal
    FROM menu.Dinner;
GO
--Ceal up
DROP VIEW dbo.Dinners;
DROP TABLE menu.Dinner;
DROP SCHEMA menu;

Вы можете получить список зависимостей, используя:

SELECT DISTINCT
       o.[name],
       o.[type_desc]
FROM sys.sql_expression_dependencies sed
     JOIN sys.objects o ON sed.referencing_id = o.object_id
WHERE sed.referenced_schema_name = N'dbo'
  AND sed.referenced_entity_name = N'Dinner';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...