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

Откуда:
Сообщений: 82
Добрый день! Visual Studio 2013 пытаюсь изменить имена таблиц.
запрос
USE mydb;
GO
EXEC sp_rename 'old', 'new' 
GO

В качестве ответа получаю
Внимание! Изменение любой части имени объекта может разрушить сценарии и хранимые процедуры.
я так понимаю это предупреждение, а что дальше?
11 июл 15, 12:48    [17879990]     Ответить | Цитировать Сообщить модератору
 Re: Изменение имени таблицы  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1836
Sergey_net,


дальше вы получили объект old с новым именем new, имейте это ввиду.

Если в каких либо процедурных модулях используется данный объект, вам необходимо вручную отредактировать данные модули что бы их работоспособность не была потеряна.
11 июл 15, 13:01    [17880011]     Ответить | Цитировать Сообщить модератору
 Re: Изменение имени таблицы  [new]
Sergey_net
Member

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

Дело в том, что я не получаю новый объект, имя таблицы не меняется
11 июл 15, 13:03    [17880014]     Ответить | Цитировать Сообщить модератору
 Re: Изменение имени таблицы  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1836
Sergey_net,

вы в этом уверены?

следайте запрос:

DECLARE @ID INT
SET @ID = -1

SELECT @ID = id FROM sysobjects WHERE NAME = 'old' AND TYPE = 'U'
SET @ID = ISNULL(@ID, 0)
SELECT OBJECT_NAME(@ID), @ID

EXEC sp_rename 'old', 'new'

SELECT @ID = id FROM sysobjects WHERE NAME = 'new' AND TYPE = 'U'
SET @ID = ISNULL(@ID, 0)
SELECT OBJECT_NAME(@ID), @ID


какой результат показывает?
возможно для sp_rename вам неоходимо указать object_type
11 июл 15, 13:07    [17880026]     Ответить | Цитировать Сообщить модератору
 Re: Изменение имени таблицы  [new]
Sergey_net
Member

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

Спасибо, нашел где проблема
База восстановлена из бекапа, и перед названием каждой таблицы добавлен префикс,
во время изменения меняется имя, а префикс остается. как можно удалить префиксы?
то есть так [pref].old--- [pref].new , Как можно получить просто new
11 июл 15, 13:29    [17880075]     Ответить | Цитировать Сообщить модератору
 Re: Изменение имени таблицы  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1836
Sergey_net,

вы уверены что это префикс а не схема владельца таблицы?

SELECT OBJECT_SCHEMA_NAME(OBJECT_ID('old'))


что показывает?
11 июл 15, 13:36    [17880094]     Ответить | Цитировать Сообщить модератору
 Re: Изменение имени таблицы  [new]
Sergey_net
Member

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

показывает null
11 июл 15, 13:44    [17880110]     Ответить | Цитировать Сообщить модератору
 Re: Изменение имени таблицы  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1836
Sergey_net,

SELECT OBJECT_SCHEMA_NAME(OBJECT_ID('[pref].old'))

а так?

вообще выведите ка
select * from sys.objects o
    join sys.schemas s on s.schema_id = o.schema_id
 where o.type = 'U' and o.name like 'old%'
11 июл 15, 13:57    [17880125]     Ответить | Цитировать Сообщить модератору
 Re: Изменение имени таблицы  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1836
и еще вот это
select * from sys.schemas where principal_id = USER_ID()


у меня есть предположение что вы работаете с объектами под пользователем не принадлежащим вашей схеме
11 июл 15, 14:01    [17880131]     Ответить | Цитировать Сообщить модератору
 Re: Изменение имени таблицы  [new]
Sergey_net
Member

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

первый показывает пустую таблицу
В базе есть схемы, для asp.net membership
для таблиц membership префиксы не появились, появились только для других таблиц. Префиксы появились после восстановления базы на новом хостинге. В результате появления префиксов, сайт не работает, из за имен таблиц.
11 июл 15, 14:12    [17880152]     Ответить | Цитировать Сообщить модератору
 Re: Изменение имени таблицы  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1836
Sergey_net,

что то вы не договариваете, чудес не бывает

еще раз, просьба показать результат:

select * from sys.objects o
    left join sys.schemas s on s.schema_id = o.schema_id
 where o.type = 'U'
    and (o.name like '%old%' or o.name like '%new%')

select * from sys.schemas where principal_id = DATABASE_PRINCIPAL_ID()
11 июл 15, 14:45    [17880213]     Ответить | Цитировать Сообщить модератору
 Re: Изменение имени таблицы  [new]
Sergey_net
Member

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

Вот скрин
http://1drv.ms/1L5rITU
для второго запроса первый столбик есть и префикс
11 июл 15, 14:53    [17880226]     Ответить | Цитировать Сообщить модератору
 Re: Изменение имени таблицы  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1836
Sergey_net,

так, уже лучше :)

вы уверены что у вас объекты в базе с именем old это таблицы? мб это вьюхи? запрос к sys.objects вообще то должен был их отобразить

SELECT type AS entity_type
    ,USER_NAME(OBJECTPROPERTY(object_id, 'OwnerId')) AS owner_name
    ,name 
FROM sys.objects WHERE SCHEMA_NAME(schema_id) = 'db_owner'
union
SELECT type AS entity_type
    ,USER_NAME(OBJECTPROPERTY(object_id, 'OwnerId')) AS owner_name
    ,name 
FROM sys.objects WHERE SCHEMA_NAME(schema_id) = 'z265234_'
GO
11 июл 15, 15:08    [17880272]     Ответить | Цитировать Сообщить модератору
 Re: Изменение имени таблицы  [new]
Sergey_net
Member

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

сделал, показывает все таблицы у которых есть префикс.
Да я уверен что таблицы, так как базу я создал.
Можно удалить эти префиксы?
11 июл 15, 15:12    [17880280]     Ответить | Цитировать Сообщить модератору
 Re: Изменение имени таблицы  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1836
Sergey_net,

ну схемы с таким именем у вас на скрине нет, так что по сути sp_rename должно помочь, первый параметр должен содержать полное название таблицы (включая префикс), а второй какое хотите получить
11 июл 15, 15:16    [17880287]     Ответить | Цитировать Сообщить модератору
 Re: Изменение имени таблицы  [new]
Sergey_net
Member

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

Меняет все кроме префикса :(
11 июл 15, 15:23    [17880305]     Ответить | Цитировать Сообщить модератору
 Re: Изменение имени таблицы  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1836
Sergey_net,

да быть такого не может, у меня все нормально меняет
if OBJECT_ID('"[tfd].old"') is not null drop table "[tfd].old"
if OBJECT_ID('new') is not null drop table new
create table "[tfd].old" (id int)
go
sp_rename '"[tfd].old"', 'new'
11 июл 15, 15:36    [17880335]     Ответить | Цитировать Сообщить модератору
 Re: Изменение имени таблицы  [new]
Sergey_net
Member

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

В определение таблицы, в visual studio для таблиц показывает что префикс есть и схмеа
Как быть? я схем с этим именем не создал. это вообще логин на старом хостинге. Хотел удалить схему, ошибка, не возможно удалить схему, так как на него ссылается объект "old"
11 июл 15, 15:37    [17880343]     Ответить | Цитировать Сообщить модератору
 Re: Изменение имени таблицы  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1836
Sergey_net,

ну так создайте новую схему, или она уже должна быть от другого пользователя и привяжите к ней ваш объект

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

alter schema new
transfer Object::old
11 июл 15, 15:44    [17880358]     Ответить | Цитировать Сообщить модератору
 Re: Изменение имени таблицы  [new]
Sergey_net
Member

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

а нельзя вообще убрать имя схемы из названия таблицы? а то придется менять имена таблиц в коде.
Если бы был один сайт, ничего, но их много
11 июл 15, 15:47    [17880363]     Ответить | Цитировать Сообщить модератору
 Re: Изменение имени таблицы  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1836
Sergey_net,

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

вы можете только поменять владельца объектов (привязать их всех к одной схеме), но тогда пользователем необходимо будет раздать права на туже самую схему и сделать ее используемой по умолчанию для них
11 июл 15, 15:56    [17880380]     Ответить | Цитировать Сообщить модератору
 Re: Изменение имени таблицы  [new]
Sergey_net
Member

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

Думаю лучше создать новые таблицы и перенести данные туда. спасибо за ответы
11 июл 15, 15:57    [17880389]     Ответить | Цитировать Сообщить модератору
 Re: Изменение имени таблицы  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1836
add:
но такое поведение неоправданно с точки зрения безопасности базы данных, разделение прав на объекты выбрано не случайно, возможно в структуре вашей бд могут существовать объекты с одинаковыми именами принадлежащие разным владельцам, в таком случае "агрегация" защищаемых объектов в одну сущность вызовет коллизии.

зачем вам вообще понадобилось кардинально менять структуру бд?
11 июл 15, 15:59    [17880394]     Ответить | Цитировать Сообщить модератору
 Re: Изменение имени таблицы  [new]
Sergey_net
Member

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

Я ничего не менял, после бекапа они появились. Я думаю хостинг автоматически добавил схему.
11 июл 15, 18:35    [17880660]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить