Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как изменить свойство identity у непустой таблици  [new]
KonstantinLP
Member

Откуда:
Сообщений: 27
Как изменить свойство identity через t-sql не зная имени Стобца? при этом столбец связан по FK с другой таблицей.. Зная только имя таблицы?
Таблица не пустая..
В общем в результате должна остаться таже таблица со связями, тригерами, ограничениями.. только без свойства identity..

Вот уже второй день пытаюсь выудить имя таблицы в переменную.. но никак..

И ещо.. даже зная имя колонки делая alter column имя_поля Int
identity свойство не убирается..

п.с пришел из мускл, просьба ногами не пинать, разбираюсь t-sql
5 авг 09, 08:38    [7498357]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство identity у непустой таблици  [new]
KonstantinLP
Member

Откуда:
Сообщений: 27
хотяб в сторону каких функций смотреть
5 авг 09, 08:47    [7498372]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство identity у непустой таблици  [new]
не всё так просто
Guest
открываем БОЛ и смотрим передстаавления INFORMATION_SCHEMA

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

зачем такая экзотика , требуется постоянно что-то менять ?
5 авг 09, 08:47    [7498373]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство identity у непустой таблици  [new]
KonstantinLP
Member

Откуда:
Сообщений: 27
Нет, просто есть интересная работа, предложили задание..
5 авг 09, 09:02    [7498413]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство identity у непустой таблици  [new]
KonstantinLP
Member

Откуда:
Сообщений: 27
KonstantinLP
Вот уже второй день пытаюсь выудить имя таблицы в переменную.. но никак..

имя столбца)
5 авг 09, 09:12    [7498437]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство identity у непустой таблици  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
sp_columns
5 авг 09, 09:50    [7498583]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство identity у непустой таблици  [new]
Glory
Member

Откуда:
Сообщений: 104760
KonstantinLP
KonstantinLP
Вот уже второй день пытаюсь выудить имя таблицы в переменную.. но никак..

имя столбца)

Вы последовали совету и ознакомились в хелпе с системными представлениями INFORMATION_SCHEMA ?
5 авг 09, 10:29    [7498853]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство identity у непустой таблици  [new]
KonstantinLP
Member

Откуда:
Сообщений: 27
Ознакамливаюсь, аж глаза разбегаются
5 авг 09, 11:12    [7499144]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство identity у непустой таблици  [new]
Glory
Member

Откуда:
Сообщений: 104760
KonstantinLP
Ознакамливаюсь, аж глаза разбегаются

Потому что и задача ваше не тревиальная
5 авг 09, 11:15    [7499178]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство identity у непустой таблици  [new]
KonstantinLP
Member

Откуда:
Сообщений: 27
--такс) выбрали получил имя поля с identity)

declare @tablename varchar(128)
declare @identitycolumn varchar(128)
set @tablename='hello'
SELECT @identitycolumn=name
from sys.identity_columns where object_id=object_id(@tablename)
print @identitycolumn
5 авг 09, 11:38    [7499374]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство identity у непустой таблици  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
KonstantinLP
--такс) выбрали получил имя поля с identity)
Ваша проблема не в том, чтобы получить название поля IDENTITY.
А в том, что придётся таблицу дропнуть вместе с констрейнтами, триггерами, индексами...
Предварительно где-то сохранив содержимое и заскриптовав структуру таблицы, разумеется.
Кстати, как собираетесь получить скрипт создания таблицы?
А также надо будет заскриптовать и дропнуть все FOREIGN KEY базы, ссылающиеся на таблицу.
Дропнуть таблицу, создать таблицу, выполнив сохранённый скрипт, перегнать данные обратно,
дропнуть таблицу, где они временно хранились, восстановить все FOREIGN KEY...

Всё это, естественно, в общем случае. Но, может, у Вас попроще ситуация?
Например, точно известно имя таблицы, её заскриптовать нет проблем с помощью SQL Server Management Studio и т.п.
5 авг 09, 12:38    [7499923]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство identity у непустой таблици  [new]
KonstantinLP
Member

Откуда:
Сообщений: 27
Известно всеголишь имя одной таблицы с identity полем.. и всё..

Ну понятно что эта задача не главная.. Но всетаки)
Буду биться..
5 авг 09, 13:40    [7500445]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство identity у непустой таблици  [new]
aleks2
Guest
KonstantinLP
Известно всеголишь имя одной таблицы с identity полем.. и всё..

Ну понятно что эта задача не главная.. Но всетаки)
Буду биться..


Чего биться то?

1. Берем ЛЮБОЙ продвинутый клиент от MS с конструктором таблиц (студию, EM, Access).
2. Создаем таблицу с IDENTITY.
3. Врубаем профайлер.
4. Просим в клиенте конструктор таблиц удалить IDENTITY.
5. Смотрим в профайлере: как убирают IDENTITY настоящие джигиты.
5 авг 09, 14:04    [7500610]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство identity у непустой таблици  [new]
Glory
Member

Откуда:
Сообщений: 104760
aleks2
KonstantinLP
Известно всеголишь имя одной таблицы с identity полем.. и всё..

Ну понятно что эта задача не главная.. Но всетаки)
Буду биться..


Чего биться то?

1. Берем ЛЮБОЙ продвинутый клиент от MS с конструктором таблиц (студию, EM, Access).
2. Создаем таблицу с IDENTITY.
3. Врубаем профайлер.
4. Просим в клиенте конструктор таблиц удалить IDENTITY.
5. Смотрим в профайлере: как убирают IDENTITY настоящие джигиты.

Там не будет видно, как эти средства создают скрипты всех объектов. Потому что они могут это делать через SMO/DMO
5 авг 09, 14:08    [7500635]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство identity у непустой таблици  [new]
KonstantinLP
Member

Откуда:
Сообщений: 27
решение задачи только черех t-sql
5 авг 09, 14:13    [7500669]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство identity у непустой таблици  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
KonstantinLP
решение задачи только черех t-sql
В самом общем виде?
5 авг 09, 14:21    [7500735]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство identity у непустой таблици  [new]
KonstantinLP
Member

Откуда:
Сообщений: 27
А чо если я создам колонку в которой будут значения совпадать с identitycolumn без свойсва identity, а потом удалю identitycolumn и переименую новую колонку..
изменится ли работа ФК, тригеров и тп?
5 авг 09, 16:46    [7501942]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство identity у непустой таблици  [new]
Glory
Member

Откуда:
Сообщений: 104760
KonstantinLP
А чо если я создам колонку в которой будут значения совпадать с identitycolumn без свойсва identity, а потом удалю identitycolumn и переименую новую колонку..
изменится ли работа ФК, тригеров и тп?

Для начала вы просто не сможете удалить поле, которое используется в ФК, индексах и пр.
Пока не измените или не удалите все эти зависимые объекты.
5 авг 09, 16:50    [7501964]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство identity у непустой таблици  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
IMHO, копаете в правильном направлении.
По крайней мере, пересоздание одного поля намного проще пересоздания таблицы.
5 авг 09, 16:56    [7502001]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство identity у непустой таблици  [new]
KonstantinLP
Member

Откуда:
Сообщений: 27
Тута с утра начал копать опять про представления..
и вдруг подумал.. а чо если запись о поле удалить из identity_columns
лезу в bol
нахожу

exec sp_configure 'allow updates', 1
GO
reconfigure with override
GO
delete from sys.identity_columns where object_id=object_id(@identitycolumn)
GO
exec sp_configure 'allow updates', 0
----
Configuration option 'allow updates' changed from 0 to 1. Run the RECONFIGURE statement to install.
Msg 259, Level 16, State 1, Line 1
Ad hoc updates to system catalogs are not allowed.
Configuration option 'allow updates' changed from 1 to 0. Run the RECONFIGURE statement to install.

((
6 авг 09, 09:51    [7503818]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство identity у непустой таблици  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
А ссылочку на BOL можно?
6 авг 09, 09:57    [7503840]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство identity у непустой таблици  [new]
KonstantinLP
Member

Откуда:
Сообщений: 27
ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.ru/s10de_6tsql/html/d18b251d-b37a-4f5f-b50c-502d689594c8.htm
6 авг 09, 10:14    [7503944]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство identity у непустой таблици  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
KonstantinLP
ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.ru/s10de_6tsql/html/d18b251d-b37a-4f5f-b50c-502d689594c8.htm
Это ссылка на статью sp_configure, а не на приведенный вами пример.

К тому же, по ссылке - ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.ru/s10de_4deptrbl/html/9f38eba6-39b1-4f1d-ba24-ee4f7e2bc969.htm в таблице параметров конфигурации написано: allow updates (Устаревший. Не используйте. Вызовет ошибку во время повторной настройки.).
И далее, по ссылке - ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.ru/s10de_4deptrbl/html/3967c3ed-280a-4de8-a2ce-393e82745a7b.htm говорится:

Этот параметр все еще присутствует в хранимой процедуре sp_configure, хотя в SQL Server данная функция недоступна. Параметр не влияет на работу сервера. Начиная с SQL Server 2005, непосредственные обновления системных таблиц не поддерживаются.

.
.
.

Изменение параметра allow updates приведет к сбою при выполнении инструкции RECONFIGURE. Изменения параметра allow updates необходимо удалить из всех сценариев.
6 авг 09, 10:22    [7504018]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство identity у непустой таблици  [new]
KonstantinLP
Member

Откуда:
Сообщений: 27
ну пример я сам накатал)
________________________________________
дальнейший ход мыслей)

exec sp_configure 'show advanced options',1
reconfigure
go
exec sp_configure 'ad hoc distributed queries',1
reconfigure
go
delete from sys.identity_columns where object_id=181575685
go
reconfigure
go
exec sp_configure 'ad hoc distributed queries',0
reconfigure
go
exec sp_configure 'show advanced options',0

___________________________________________---
Configuration option 'show advanced options' changed from 0 to 1. Run the RECONFIGURE statement to install.
Configuration option 'Ad Hoc Distributed Queries' changed from 0 to 1. Run the RECONFIGURE statement to install.
Msg 259, Level 16, State 1, Line 1
Ad hoc updates to system catalogs are not allowed.
Configuration option 'Ad Hoc Distributed Queries' changed from 1 to 0. Run the RECONFIGURE statement to install.
Configuration option 'show advanced options' changed from 1 to 0. Run the RECONFIGURE statement to install.
6 авг 09, 10:27    [7504059]     Ответить | Цитировать Сообщить модератору
 Re: Как изменить свойство identity у непустой таблици  [new]
KonstantinLP
Member

Откуда:
Сообщений: 27
"go
reconfigure"
лишаковый код после delete)
короч палюбэ ошиба 259..
6 авг 09, 10:30    [7504077]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить