Често има много начини да направите същото (или подобно) нещо в SQL Server. Извличането на всички първични ключове от база данни (или дори само първичния ключ за дадена таблица) е примерен случай.
Тази статия представя единадесет различни подхода за извличане на информация за първичен ключ в SQL Server.
Някои от тях ще бъдат по-полезни от други, в зависимост от вашата точна ситуация.
Пример 1 – Системната запаметена процедура sp_pkeys
Ако искате просто първичния ключ за дадена таблица, sp_pkeys
системната съхранена процедура е може би най-бързият и лесен начин да го направите. За да направите това, просто предайте името на таблицата на процедурата.
Като това:
EXEC sp_pkeys Изпълнители;
Резултат (с помощта на вертикален изход):
TABLE_QUALIFIER | MusicTABLE_OWNER | dboTABLE_NAME | ИзпълнителиCOLUMN_NAME | ArtistIdKEY_SEQ | 1PK_NAME | PK__Художници__25706B50FCD918B1
В този случай поисках първичния ключ от Изпълнители маса. Връща името на първичния ключ ( PK__Artists__25706B50FCD918B1 ), името на базата данни ( Музика ), името на таблицата, името на колоната ( ArtistId ), плюс друга информация.
Като алтернатива бих могъл изрично да посоча всички аргументи, за да получа същия резултат:
EXEC sp_pkeys @table_name =Изпълнители, @table_owner =dbo, @table_qualifier =Музика;
Пример 2 – Системният изглед KEY_COLUMN_USAGE
INFORMATION_SCHEMA.KEY_COLUMN_USAGE
системният изглед връща един ред за всяка колона, която е ограничена като ключ в текущата база данни. Следователно ще получите и външни ключове, върнати с този изглед.
ИЗБЕРЕТЕ TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAMEFROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE;
Резултат:
+--------------+--------------+-------------- ----------------+| TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME ||--------------+--------------+---------------- ---------------|| Албуми | ArtistId | FK_Албуми_Изпълнители || Албуми | GenreId | FK_Албуми_Жанрове || Албуми | ID на албума | PK__Албуми__97B4BE379FC780BD || Художници | ArtistId | PK__Художници__25706B50FCD918B1 || Жанрове | GenreId | PK__Genres__0385057E88BB96F8 |+--------------+--------------+---------------- ---------------+
Можем да видим, че това връща ограничения от всички таблици. Бихме могли също да добавим WHERE
клауза, за да стесните резултатите до конкретна таблица.
ИЗБЕРЕТЕ TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAMEFROM INFORMATION_SCHEMA.KEY_COLUMN_USAGEWHERE TABLE_NAME ='Изпълнители';
Резултат:
+--------------+--------------+-------------- ----------------+| TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME ||--------------+--------------+---------------- ---------------|| Художници | ArtistId | PK__Изпълнители__25706B50FCD918B1 |+--------------+--------------+---------------- ---------------+
В тези примери стесних резултатите само до онези колони на изгледа, които ме интересуват, но можете да използвате и звездичката (*
) заместващ знак за връщане на всички колони.
ИЗБЕРЕТЕ *FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGEWHERE TABLE_NAME ='Художници';
Резултат (с помощта на вертикален изход):
CONSTRAINT_CATALOG | МузикаCONSTRAINT_SCHEMA | dboCONSTRAINT_NAME | PK__Художници__25706B50FCD918B1TABLE_CATALOG | МузикаTABLE_SCHEMA | dboTABLE_NAME | ИзпълнителиCOLUMN_NAME | ArtistIdORDINAL_POSITION | 1
Пример 3 – Системният изглед CONSTRAINT_COLUMN_USAGE
Това е подобно на предишния пример. INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
системният изглед връща един ред за всяка колона в текущата база данни, която има дефинирано ограничение за колоната. Както при INFORMATION_SCHEMA.KEY_COLUMN_USAGE
вие също ще получите външни ключове, върнати с този изглед. Въпреки това, INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE
не се ограничава само до ключови ограничения.
ИЗБЕРЕТЕ TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAMEFROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE;
Резултат:
+--------------+--------------+-------------- ----------------+| TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME ||--------------+--------------+---------------- ---------------|| Албуми | ArtistId | FK_Албуми_Изпълнители || Албуми | GenreId | FK_Албуми_Жанрове || Албуми | ID на албума | PK__Албуми__97B4BE379FC780BD || Художници | ArtistId | PK__Художници__25706B50FCD918B1 || Жанрове | GenreId | PK__Genres__0385057E88BB96F8 |+--------------+--------------+---------------- ---------------+
Можете да използвате WHERE
клауза за връщане само на конкретна таблица или колона:
ИЗБЕРЕТЕ TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAMEFROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGEWHERE COLUMN_NAME ='ArtistId';
Резултат:
+--------------+--------------+-------------- ----------------+| TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME ||--------------+--------------+---------------- ---------------|| Албуми | ArtistId | FK_Албуми_Изпълнители || Художници | ArtistId | PK__Изпълнители__25706B50FCD918B1 |+--------------+--------------+---------------- ---------------+
В този случай посочих име на колона, така че той върна всички ограничения за колони с това име. Както се оказва, базата данни използва едно и също име на колона в две различни таблици. Единият има ограничение за външен ключ, а другият първичен ключ. Следователно и двата реда се връщат.
Отново можете да използвате звездичката (*
) заместващ знак за връщане на всички колони.
ИЗБЕРЕТЕ *FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGEWHERE TABLE_NAME ='Художници';
Резултат (с помощта на вертикален изход):
ТАБЛИЦА_КАТАЛОГ | МузикаTABLE_SCHEMA | dboTABLE_NAME | ИзпълнителиCOLUMN_NAME | ArtistIdCONSTRAINT_CATALOG | МузикаCONSTRAINT_SCHEMA | dboCONSTRAINT_NAME | PK__Художници__25706B50FCD918B1
В този пример ограничих изхода само до ограничения върху конкретна таблица.
Пример 4 – Системният изглед CONSTRAINT_TABLE_USAGE
INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE
системният изглед връща един ред за всяка таблица в текущата база данни, която има дефинирано ограничение за таблицата.
ИЗБЕРЕТЕ TABLE_NAME, CONSTRAINT_NAME ОТ INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE;
Резултат:
+--------------+------------------------------ +| TABLE_NAME | ИМЕ НА ОГРАНИЧЕНИЕ ||--------------+------------------------------| | Художници | PK__Художници__25706B50FCD918B1 || Жанрове | PK__Жанрове__0385057E88BB96F8 || Албуми | PK__Албуми__97B4BE379FC780BD || Албуми | FK_Албуми_Изпълнители || Албуми | FK_Албуми_Жанрове |+--------------+------------------------------+
Този изглед не връща имената на колоните, за които се използват ограниченията, така че може да не е толкова полезен за вас, в зависимост от вашите изисквания.
Ето пример, който показва всички данни, върнати от този изглед за Жанрове таблица:
SELECT * FROM INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGEWHERE TABLE_NAME ='Жанрове';
Резултат:
ТАБЛИЦА_КАТАЛОГ | МузикаTABLE_SCHEMA | dboTABLE_NAME | ЖанровеCONSTRAINT_CATALOG | МузикаCONSTRAINT_SCHEMA | dboCONSTRAINT_NAME | PK__Genres__0385057E88BB96F8
Пример 5 – Системният изглед TABLE_CONSTRAINTS
INFORMATION_SCHEMA.TABLE_CONSTRAINTS
системният изглед връща един ред за всяко ограничение на таблицата в текущата база данни.
ИЗБЕРЕТЕ TABLE_NAME, CONSTRAINT_NAME, CONSTRAINT_TYPEFROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
Резултат:
+--------------+------------------------------ +------------------+| TABLE_NAME | CONSTRAINT_NAME | ОГРАНИЧЕНИЕ_ТИП ||--------------+------------------------------+ -------------------|| Художници | PK__Художници__25706B50FCD918B1 | ПЪРВИЧЕН КЛЮЧ || Жанрове | PK__Жанрове__0385057E88BB96F8 | ПЪРВИЧЕН КЛЮЧ || Албуми | PK__Албуми__97B4BE379FC780BD | ПЪРВИЧЕН КЛЮЧ || Албуми | FK_Албуми_Изпълнители | ВЪНШЕН КЛЮЧ || Албуми | FK_Албуми_Жанрове | ВЪНШЕН КЛЮЧ |+--------------+------------------------------ +-------------------+
Този изглед не предоставя името на колоната, но предоставя типа на ограничението. Следователно можете да стесните резултатите само до първични ключове:
ИЗБЕРЕТЕ TABLE_NAME, CONSTRAINT_NAME, CONSTRAINT_TYPEFROM INFORMATION_SCHEMA.TABLE_CONSTRAINTSWHERE CONSTRAINT_TYPE ='PRIMARY KEY';
Резултат:
+--------------+------------------------------ +------------------+| TABLE_NAME | CONSTRAINT_NAME | ОГРАНИЧЕНИЕ_ТИП ||--------------+------------------------------+ -------------------|| Художници | PK__Художници__25706B50FCD918B1 | ПЪРВИЧЕН КЛЮЧ || Жанрове | PK__Жанрове__0385057E88BB96F8 | ПЪРВИЧЕН КЛЮЧ || Албуми | PK__Албуми__97B4BE379FC780BD | ПЪРВИЧЕН КЛЮЧ |+--------------+--------------------------------------- +-------------------+
Ето пример, който използва заместващ знак (*
) символ за връщане на всички данни за ограничения за
Изпълнители
таблица:
SELECT *FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTSWHERE TABLE_NAME ='Художници';
Резултат:
CONSTRAINT_CATALOG | МузикаCONSTRAINT_SCHEMA | dboCONSTRAINT_NAME | PK__Художници__25706B50FCD918B1TABLE_CATALOG | МузикаTABLE_SCHEMA | dboTABLE_NAME | ИзпълнителиCONSTRAINT_TYPE | ПЪРВИЧЕН КЛЮЧ_ОТЛОЖЕН | NOINITIALLY_DEFERRED | НЕ
Пример 6 – Системният изглед на key_constraints
sys.key_constraints
системният изглед съдържа ред за всеки обект, който е първичен ключ или уникално ограничение. Следователно бихме могли да използваме следния код, за да върнем всички ограничения на първичния ключ в базата данни, заедно със съответната таблица за всеки първичен ключ:
ИЗБЕРЕТЕ OBJECT_NAME(parent_object_id) КАТО 'Таблица', nameFROM sys.key_constraints WHERE type ='PK';
Резултат:
+--------+------------------------------+| Таблица | име ||--------+------------------------------|| Художници | PK__Художници__25706B50FCD918B1 || Жанрове | PK__Жанрове__0385057E88BB96F8 || Албуми | PK__Албуми__97B4BE379FC780BD |+--------+------------------------------+
Разбира се, можете да премахнете WHERE
клауза за връщане на двата първични ключа и уникални ключове.
Предишният пример използва OBJECT_NAME()
функция, за да върне името на родителската таблица, а не нейния object_id. Ако не използвах OBJECT_NAME()
функция, резултатът би изглеждал така:
ИЗБЕРЕТЕ parent_object_id, nameFROM sys.key_constraintsWHERE type ='PK';
Резултат:
+--------------------+------------------- ------+| идентификатор_на_обект_родител | име ||--------------------+----------------------------------- -----|| 885578193 | PK__Художници__25706B50FCD918B1 || 917578307 | PK__Жанрове__0385057E88BB96F8 || 949578421 | PK__Албуми__97B4BE379FC780BD |+-------------------+------------------------- -----+
идентификатор_на_родителски_обект
се връща вместо името на родителския обект. OBJECT_NAME()
функцията ни прави много по-лесно да разберем към коя таблица се прилага всеки ключ.
Ето пример, в който използвам заместващия знак (*
) символ за връщане на всички колони за първичния ключ в
Албуми
таблица:
SELECT *FROM sys.key_constraintsWHERE type ='PK'AND OBJECT_NAME(parent_object_id) ='Албуми';
Резултат:
<предварително име | PK__Албуми__97B4BE379FC780Bobject_id | 965578478principal_id | NULLschema_id | 1 идентификатор_на_родител_обект | 949578421вид | PKtype_desc | PRIMARY_KEY_CONSTRAINT дата_създаване | 2019-05-02 12:56:06.377modify_date | 2019-05-02 12:56:06.377is_ms_shipped | 0е_публикувано | 0is_schema_published | 0уникален_идентификатор_индекс | 1is_system_named | 1е_принудително | 1Пример 7 – Системният изглед sys.objects
sys.objects
системният изглед съдържа ред за всеки дефиниран от потребителя обект с обхват на схема, който е създаден в база данни. Така че съдържа нашите таблици и първични ключове.
Можем да вземем предишната заявка и да заменим key_constraints
с objects
и ще получим същия резултат:
ИЗБЕРЕТЕ OBJECT_NAME(parent_object_id) КАТО 'Таблица', nameFROM sys.objects WHERE type ='PK';
Резултат:
+--------+------------------------------+| Таблица | име ||--------+------------------------------|| Художници | PK__Художници__25706B50FCD918B1 || Жанрове | PK__Жанрове__0385057E88BB96F8 || Албуми | PK__Албуми__97B4BE379FC780BD |+--------+------------------------------+
Ето пример, който връща всички данни за PK__Genres__0385057E88BB96F8 първичен ключ:
SELECT *FROM sys.objectsWHERE name ='PK__Genres__0385057E88BB96F8';
Резултат (с помощта на вертикален изход):
<предварително име | PK__Genres__0385057E88BB96F8object_id | 933578364principal_id | NULLschema_id | 1 идентификатор_на_родител_обект | 917578307вид | PKtype_desc | PRIMARY_KEY_CONSTRAINT дата_създаване | 2019-05-02 12:56:06.110modify_date | 2019-05-02 12:56:06.110is_ms_shipped | 0е_публикувано | 0is_schema_published | 0Пример 8 – Системният изглед REFERENTIAL_CONSTRAINTS
Това е малко разтягащо, но може да бъде полезно в зависимост от вашата ситуация. И технически той връща (някои) първични ключове.
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
системният изглед връща един ред за всеки FOREIGN KEY
ограничение в текущата база данни. Така че целта му всъщност е да върне външни ключове, а не първични ключове. Този изглед обаче може да бъде удобен, ако искате да видите само всички първични ключове, които имат асоцииран външен ключ. Това не е надежден метод за използване, ако искате да видите всички първични ключове, независимо дали има свързан външен ключ.
Ето един пример:
ИЗБЕРЕТЕ CONSTRAINT_NAME, UNIQUE_CONSTRAINT_NAMEFROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS;
Резултат:
+------------------+----------------------------------- -----+| CONSTRAINT_NAME | UNIQUE_CONSTRAINT_NAME ||-------------------+--------------------------- ----|| FK_Албуми_Изпълнители | PK__Художници__25706B50FCD918B1 || FK_Албуми_Жанрове | PK__Genres__0385057E88BB96F8 |+-------------------+-------------------------- ----+
Както можете да видите, това връща само онези първични ключове, които имат свързан външен ключ. За да бъдем по-точни, всъщност е обратното – връща всички външни ключове, заедно със свързаните с тях UNIQUE
ограничение.
Така че, ако сравним тези резултати с резултатите от предишни примери, можем да видим, че са върнати само два първични ключа (в сравнение с три от предишни примери). Това е така, защото един от първичните ключове в тази база данни ( PK__Albums__97B4BE379FC780BD ) няма свързан външен ключ.
Ето пример, който връща всички данни за външни ключове, от които
PK__Artists__25706B50FCD918B1
е UNIQUE
ограничение:
ИЗБЕРЕТЕ *ОТ INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTSWHERE UNIQUE_CONSTRAINT_NAME ='PK__Artists__25706B50FCD918B1';
Резултат:
CONSTRAINT_CATALOG | МузикаCONSTRAINT_SCHEMA | dboCONSTRAINT_NAME | FK_Albums_ArtistsUNIQUE_CONSTRAINT_CATALOG | МузикаUNIQUE_CONSTRAINT_SCHEMA | dboUNIQUE_CONSTRAINT_NAME | PK__Изпълнители__25706B50FCD918B1MATCH_OPTION | SIMPLEUPDATE_RULE | НЯМА ACTIONDELETE_RULE | БЕЗ ДЕЙСТВИЕ
В този случай се връща само един външен ключ.
Както споменахме, този изглед е основно за връщане на информация за външен ключ, така че използвайте този метод само ако искате да видите информация за външния ключ заедно със свързания първичен ключ. Не използвайте този метод, ако искате да видите всички първични ключове, независимо дали имат свързан външен ключ.
Пример 9 – Системната запаметена процедура sp_fkeys
Този метод е подобен на предишния метод, в смисъл, че връща информация за външния ключ. Той също така връща първичния ключ, свързан с всеки външен ключ.
Пример:
EXEC sp_fkeys Изпълнители;
Резултат (с помощта на вертикален изход):
PKTABLE_QUALIFIER | MusicPKTABLE_OWNER | dboPKTABLE_NAME | ИзпълнителиPKCOLUMN_NAME | ArtistIdFKTABLE_QUALIFIER | MusicFKTABLE_OWNER | dboFKTABLE_NAME | АлбумиFKCOLUMN_NAME | ArtistIdKEY_SEQ | 1UPDATE_RULE | 1DELETE_RULE | 1FK_NAME | FK_Albums_ArtsPK_NAME | PK__Артисти__25706B50FCD918B1 ОТЛОЖЕНИЕ | 7
Вместо това можех да използвам следния синтаксис (или комбинация от тези аргументи):
EXEC sp_fkeys @pktable_name =Изпълнители, @pktable_owner =dbo, @pktable_qualifier =Музика, @fktable_name =Албуми, @fktable_owner =dbo, @fktable_qualifier =Музика;
Както и в предишния пример, на този метод не трябва да се разчита за връщане на всички първични ключове. Ако първичният ключ няма свързан външен ключ, той няма да бъде върнат.
Пример 10 – Съхранената процедура на системата sp_helpconstraint
sp_helpconstraint
системната съхранена процедура връща списък с всички типове ограничения, тяхното дефинирано от потребителя или предоставено от системата име, колоните, в които са били дефинирани, и израза, който дефинира ограничението (за DEFAULT
и CHECK
само ограничения).
Следователно можете да го използвате, за да върнете информация за първичните ключове във вашата база данни.
Пример:
EXEC sp_helpconstraint Албуми;
Резултат:
+---------------+| Име на обект ||--------------|| Албуми |+---------------+ -[ ЗАПИС 1 ]------------------------ограничен тип | FOREIGN KEY име на_ограничение | FK_Albums_Artistsdelete_action | Без Actionupdate_action | Няма статус на действие_активиран | Enabledstatus_for_replication | Is_For_Replicationconstraint_keys | ArtistId-[ RECORD 2 ]------------------------------ тип_ограничение | име_на_ограничение | изтриване_действие | действие_актуализация | status_enabled | статус_за_репликация | ограничителни_ключове | ПРЕПОРЪЧКИ Music.dbo.Artists (ArtistId)-[ RECORD 3 ]-------------------------ограничение_тип | FOREIGN KEY име на_ограничение | FK_Albums_Genresdelete_action | Без Actionupdate_action | Няма статус на действие_активиран | Enabledstatus_for_replication | Is_For_Replicationconstraint_keys | GenreId-[ RECORD 4 ]------------------------------ тип_ограничение | име_на_ограничение | изтриване_действие | действие_актуализация | status_enabled | статус_за_репликация | ограничителни_ключове | ПРЕПОРЪЧКИ Music.dbo.Genres (GenreId)-[ RECORD 5 ]-------------------------constraint_type | ПЪРВИЧЕН КЛЮЧ (клъстериран) име_на_ограничение | PK__Албуми__97B4BE379FC780BDdelete_action | (n/a)update_action | (n/a) status_enabled | (n/a)status_for_replication | (n/a)ограничителни_ключове | ID на албума
Пример 11 – Съхранената процедура на системата sp_help
sp_help
системната съхранена процедура отчита информация за обект на база данни (всеки обект, изброен в sys.sysobjects
изглед за съвместимост), дефиниран от потребителя тип данни или тип данни. Това включва информация за първичните ключове.
Когато изпълните това без никакви аргументи, той предоставя информация за обобщена информация за обекти от всички типове, които съществуват в текущата база данни, се връща (т.е. партия на информация).
Можете обаче да предоставите името на таблица и то ще върне информация за тази таблица. Отново ще получите много информация, върната, но сред това ще бъде информация от първичен ключ.
Пример:
EXEC sp_help Изпълнители;
Резултат:
+--------+--------+-----------+------------ ------------+| Име | Собственик | Тип | Created_datetime ||---------+--------+-----------+-------------- -----------|| Художници | dbo | потребителска таблица | 2019-05-02 12:56:05,840 |+---------+---------+-----------+----- --------------------+ -[ ЗАПИС 1 ]-------------------------------- -Име_на_колона | ArtistIdType | intComputed | без дължина | 4Prec | 10 Скала | 0 с нула | noTrimTrailingBlanks | (n/a)FixedLenNullInSource | (n/a) Съпоставяне | NULL-[ ЗАПИС 2 ]------------------------------Име_на_колона | ArtistNameType | nvarcharComputed | без дължина | 510Prec | Мащаб | Nullable | noTrimTrailingBlanks | (n/a)FixedLenNullInSource | (n/a) Съпоставяне | SQL_Latin1_General_CP1_CI_AS-[ ЗАПИС 3 ]------------------------Име_на_колона | ActiveFromType | изчислена дата | без дължина | 3Prec | 10 Скала | 0 с нула | даTrimTrailingBlanks | (n/a)FixedLenNullInSource | (n/a) Съпоставяне | NULL +-----------+-------+------------+------------ -----------+| Самоличност | Семената | Увеличение | Не е за репликация ||------------+-------+------------+--------- --------------|| ArtistId | 1 | 1 | 0 |+-----------+-------+------------+----------- ------------+ +------------------------------+| RowGuidCol ||---------------------------------------|| Няма дефинирана колона rowguidcol. |+------------------------------+ +-------------- --------------+| Data_located_on_filegroup ||----------------------------|| ОСНОВНО |+----------------------------+ +---------------- ---------------+-------------------------------- -----------------+--------------+| име на индекс | индекс_описание | ключове_индекс ||------------------------------+-------------- ------------------------------------+------------ -|| PK__Художници__25706B50FCD918B1 | клъстериран, уникален, първичен ключ, разположен на PRIMARY | ArtistId |+-------------------------------+--------------- ------------------------------------+------------ -+ -[ ЗАПИС 1 ]------------------------------ тип_ограничение | ПЪРВИЧЕН КЛЮЧ (клъстериран) име_на_ограничение | PK__Изпълнители__25706B50FCD918B1delete_action | (n/a)update_action | (n/a) status_enabled | (n/a)status_for_replication | (n/a)ограничителни_ключове | ArtistId +----------------------------------------+| Таблицата се препраща от външен ключ ||----------------------------------------------|| Music.dbo.Албуми:FK_Albums_Artists |+-------------------------------------+предварително>Можете също да предоставите името на първичен ключ, за да получите основна информация за него:
EXEC sp_help PK__Artists__25706B50FCD918B1;Резултат:
+------------------------------+--------+---- -------------+-------------------------+| Име | Собственик | Тип | Дата_час ||------------------------------+--------+----- ------------+------------------------|| PK__Художници__25706B50FCD918B1 | dbo | първичен ключ cns | 2019-05-02 12:56:05,853 |+------------------------------+------ ---+----------------+-------------------+предварително>