Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как выбрать таблицы у которых нет первичных ключей ?  [new]
Lavrenkov212121
Guest
Нужно выбрать из всей БД все таблицы, у которых нет первичных ключей, и добавить им их.
19 янв 17, 15:13    [20123201]     Ответить | Цитировать Сообщить модератору
 Re: как выбрать таблицы у которых нет первичных ключей ?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Lavrenkov212121,
ну выбрать как-то типа такого
SELECT * 
FROM sys.Tables x
WHERE
NOT EXISTS
(
	SELECT 1
	FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
	WHERE	OBJECTPROPERTY(OBJECT_ID(CONSTRAINT_SCHEMA + '.' + CONSTRAINT_NAME), 'IsPrimaryKey') = 1
		AND TABLE_SCHEMA = 'dbo'
		AND x.Name = Table_Name
) 


автор
добавить им их.
от фонаря что ли????
19 янв 17, 15:19    [20123236]     Ответить | Цитировать Сообщить модератору
 Re: как выбрать таблицы у которых нет первичных ключей ?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
нафига я вообще в sys.Tables лез :)
19 янв 17, 15:20    [20123244]     Ответить | Цитировать Сообщить модератору
 Re: как выбрать таблицы у которых нет первичных ключей ?  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
TaPaK,

отчего не [INFORMATION_SCHEMA].[TABLE_CONSTRAINTS]?
19 янв 17, 15:22    [20123258]     Ответить | Цитировать Сообщить модератору
 Re: как выбрать таблицы у которых нет первичных ключей ?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Дедушка
TaPaK,

отчего не [INFORMATION_SCHEMA].[TABLE_CONSTRAINTS]?

да, так правильнее. То если надо колонки в PK
19 янв 17, 15:26    [20123289]     Ответить | Цитировать Сообщить модератору
 Re: как выбрать таблицы у которых нет первичных ключей ?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5975
select schema_name(schema_id), name
from sys.objects o
where o.type='U' and not exists (
  select 1
  from sys.objects p
  where p.parent_object_id=o.object_id and p.type='PK'
)
19 янв 17, 15:30    [20123314]     Ответить | Цитировать Сообщить модератору
 Re: как выбрать таблицы у которых нет первичных ключей ?  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Вообще говоря, если даже нет констрейнта PK,
фактически он может-таки быть в виде UNIQUE или даже просто уникального индекса.
Так что можно просто проверять наличие уникального индекса у таблицы.
19 янв 17, 15:33    [20123331]     Ответить | Цитировать Сообщить модератору
 Re: как выбрать таблицы у которых нет первичных ключей ?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
iap
Вообще говоря, если даже нет констрейнта PK,
фактически он может-таки быть в виде UNIQUE или даже просто уникального индекса.
Так что можно просто проверять наличие уникального индекса у таблицы.

имхо суть задачи избавится от куч...
19 янв 17, 15:39    [20123366]     Ответить | Цитировать Сообщить модератору
 Re: как выбрать таблицы у которых нет первичных ключей ?  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
TaPaK
iap
Вообще говоря, если даже нет констрейнта PK,
фактически он может-таки быть в виде UNIQUE или даже просто уникального индекса.
Так что можно просто проверять наличие уникального индекса у таблицы.

имхо суть задачи избавится от куч...
Даже если и так, и что?
19 янв 17, 15:41    [20123378]     Ответить | Цитировать Сообщить модератору
 Re: как выбрать таблицы у которых нет первичных ключей ?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
iap
TaPaK
пропущено...

имхо суть задачи избавится от куч...
Даже если и так, и что?

там разве не кластерный?
19 янв 17, 15:47    [20123406]     Ответить | Цитировать Сообщить модератору
 Re: как выбрать таблицы у которых нет первичных ключей ?  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
TaPaK
iap
пропущено...
Даже если и так, и что?

там разве не кластерный?
Какой хотим, такой и сделаем!
При чём тут констрейнт PK?
Он нужен только для наглядного документирования структуры БД.
Физически всё равно обеспечивается уникальным индексом.
19 янв 17, 15:50    [20123422]     Ответить | Цитировать Сообщить модератору
 Re: как выбрать таблицы у которых нет первичных ключей ?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
iap,

автор
При чём тут констрейнт PK?
PK не кластерный?
19 янв 17, 15:54    [20123442]     Ответить | Цитировать Сообщить модератору
 Re: как выбрать таблицы у которых нет первичных ключей ?  [new]
Lavrenkov212121
Guest
TaPaK,

Добавит всем таблицам у которых нет РК
19 янв 17, 16:03    [20123498]     Ответить | Цитировать Сообщить модератору
 Re: как выбрать таблицы у которых нет первичных ключей ?  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5975
TaPaK
iap,

автор
При чём тут констрейнт PK?
PK не кластерный?

Запросто. Достаточно часто встречался с практикой делать суррогатный PK некластерным, а кластерным - уникальный натуральный констрейнт.
И да, чем плоха абстрактная куча в вакууме? почему от нее обязательно нужно избавляться?
19 янв 17, 16:04    [20123500]     Ответить | Цитировать Сообщить модератору
 Re: как выбрать таблицы у которых нет первичных ключей ?  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
TaPaK
iap,

автор
При чём тут констрейнт PK?
PK не кластерный?
Какой сделали.
Может быть и кластерным и некластерным.
Это всё равно относится к уникальному индексу с тем же именем, что и PK, который создаётся автоматически.
Кластерность в данном случае к теме не относится.
19 янв 17, 16:04    [20123503]     Ответить | Цитировать Сообщить модератору
 Re: как выбрать таблицы у которых нет первичных ключей ?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Сон Веры Павловны
TaPaK
iap,

пропущено...
PK не кластерный?

Запросто. Достаточно часто встречался с практикой делать суррогатный PK некластерным, а кластерным - уникальный натуральный констрейнт.

то я о чём то не том думаю :) вообщем-то у нас так 90% таблиц так.

автор
И да, чем плоха абстрактная куча в вакууме? почему от нее обязательно нужно избавляться?

я вроде про плохо и не говорил
19 янв 17, 16:49    [20123691]     Ответить | Цитировать Сообщить модератору
 Re: как выбрать таблицы у которых нет первичных ключей ?  [new]
o-o
Guest
TaPaK
iap
Вообще говоря, если даже нет констрейнта PK,
фактически он может-таки быть в виде UNIQUE или даже просто уникального индекса.
Так что можно просто проверять наличие уникального индекса у таблицы.

имхо суть задачи избавится от куч...

в дурацкой таблице из соседней темы,
которая сплошной ntext,
есть ПК,
даже не скромный уникальный индекс,
а гордо заявленный ПК некластерный, на identity.
но таблица еще какая куча
19 янв 17, 17:21    [20123849]     Ответить | Цитировать Сообщить модератору
 Re: как выбрать таблицы у которых нет первичных ключей ?  [new]
б-с
Member

Откуда: СПб
Сообщений: 254
Lavrenkov212121
TaPaK,

Добавит всем таблицам у которых нет РК


Lavrenkov212121,

курсор,например.
а у Вас какие идеи?
19 янв 17, 17:52    [20124064]     Ответить | Цитировать Сообщить модератору
 Re: как выбрать таблицы у которых нет первичных ключей ?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Lavrenkov212121
TaPaK,

Добавит всем таблицам у которых нет РК

а параметры для PK выбирать случайным образом?
19 янв 17, 17:53    [20124080]     Ответить | Цитировать Сообщить модератору
 Re: как выбрать таблицы у которых нет первичных ключей ?  [new]
Владислав Колосов
Member

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

человек как-то принимает решение по назначению ключа, т.е. алгоритмически можно понять по выполнению требований в большем количестве случаев. Остальное руками допилить можно.
19 янв 17, 18:03    [20124111]     Ответить | Цитировать Сообщить модератору
 Re: как выбрать таблицы у которых нет первичных ключей ?  [new]
o-o
Guest
Владислав Колосов
TaPaK,

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

мало ли как он "решение примет".
чего-то мне сдается, ему все равно, что за поля в ключ войдут,
и в каком порядке.
может, их задолбали дупликаты и им сказали:
да у вас таблицы без ключей, чего же вы хотите?
теперь он хочет универсальный скрипт типа:
найти все таблицы без ПК и перелить все содержимое ровно в такую же таблицу + поле-identity.
и тогда уже никто не сможет сказать: у вас нет ключей!
правда, дубли никуда не денутся, но зато каждой таблице по ключу
19 янв 17, 18:22    [20124188]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить