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

Откуда: Донецк
Сообщений: 131
Нужно определить значение ключевого поля текущей записи.
Беда в том, что в разных таблицах это поле имеет разные названия.
Можно как-то узнать имя ключевого поля, зная имя таблицы ?
С уважением,
Сергей Т.
25 фев 11, 14:21    [10289946]     Ответить | Цитировать Сообщить модератору
 Re: Как определить имя ключевого поля таблицы ?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
SergT, sp_help
25 фев 11, 14:32    [10289990]     Ответить | Цитировать Сообщить модератору
 Re: Как определить имя ключевого поля таблицы ?  [new]
_ч_
Member

Откуда:
Сообщений: 1446
SergT
Нужно определить значение ключевого поля текущей записи.
Беда в том, что в разных таблицах это поле имеет разные названия.
Можно как-то узнать имя ключевого поля, зная имя таблицы ?
С уважением,
Сергей Т.

ключевое поле это столбец Primary Key? Если да, то имена в MSSQL08 можно получить так:

select * from sys.identity_columns
where object_id in
(select id from sys.sysobjects
where name like 'tblAuto')
25 фев 11, 14:36    [10290012]     Ответить | Цитировать Сообщить модератору
 Re: Как определить имя ключевого поля таблицы ?  [new]
_ч_
Member

Откуда:
Сообщений: 1446
select * from sys.identity_columns
where object_id in
(select id from sys.sysobjects
where name like 'имя_таблицы')
[/quot]
25 фев 11, 14:37    [10290019]     Ответить | Цитировать Сообщить модератору
 Re: Как определить имя ключевого поля таблицы ?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
_ч_
SergT
Нужно определить значение ключевого поля текущей записи.
Беда в том, что в разных таблицах это поле имеет разные названия.
Можно как-то узнать имя ключевого поля, зная имя таблицы ?
С уважением,
Сергей Т.

ключевое поле это столбец Primary Key? Если да, то имена в MSSQL08 можно получить так:

select * from sys.identity_columns
where object_id in
(select id from sys.sysobjects
where name like 'tblAuto')
А для вас большим сюрпризом будет узнать, что ключевые поля и identity поля - две совершенно разные вещи?
25 фев 11, 14:38    [10290030]     Ответить | Цитировать Сообщить модератору
 Re: Как определить имя ключевого поля таблицы ?  [new]
_ч_
Member

Откуда:
Сообщений: 1446
Гавриленко Сергей Алексеевич,

да, не то написал
25 фев 11, 14:41    [10290052]     Ответить | Цитировать Сообщить модератору
 Re: Как определить имя ключевого поля таблицы ?  [new]
SergT
Member

Откуда: Донецк
Сообщений: 131
kDnZP
SergT, sp_help

И что ей указать в качестве параметра чтобы получить имя столбца Identity ?
25 фев 11, 14:46    [10290084]     Ответить | Цитировать Сообщить модератору
 Re: Как определить имя ключевого поля таблицы ?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
SergT
kDnZP
SergT, sp_help

И что ей указать в качестве параметра чтобы получить имя столбца Identity ?
Так ключевое поле или identity?

Сообщение было отредактировано: 25 фев 11, 14:47
25 фев 11, 14:47    [10290092]     Ответить | Цитировать Сообщить модератору
 Re: Как определить имя ключевого поля таблицы ?  [new]
_ч_
Member

Откуда:
Сообщений: 1446
select * from sys.indexes 
where is_primary_key = 1 and object_id in
(select object_id from sys.objects where name = 'имя_таблицы')
вот то, если ключевые поля = PK
25 фев 11, 14:48    [10290104]     Ответить | Цитировать Сообщить модератору
 Re: Как определить имя ключевого поля таблицы ?  [new]
_ч_
Member

Откуда:
Сообщений: 1446
Гавриленко Сергей Алексеевич
SergT
пропущено...

И что ей указать в качестве параметра чтобы получить имя столбца Identity ?
Так ключевое поле или identity?

автор сам не знает
25 фев 11, 14:48    [10290110]     Ответить | Цитировать Сообщить модератору
 Re: Как определить имя ключевого поля таблицы ?  [new]
SergT
Member

Откуда: Донецк
Сообщений: 131
_ч_
Гавриленко Сергей Алексеевич,

да, не то написал

Может и не то в представлении Гуру, но для меня то, что нужно было :)
Спасибо !!!
25 фев 11, 14:49    [10290118]     Ответить | Цитировать Сообщить модератору
 Re: Как определить имя ключевого поля таблицы ?  [new]
_ч_
Member

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

пожалуйста, только если у вас поле будет не identity, то в результат той выборки оно не попадет.
25 фев 11, 14:50    [10290131]     Ответить | Цитировать Сообщить модератору
 Re: Как определить имя ключевого поля таблицы ?  [new]
SergT
Member

Откуда: Донецк
Сообщений: 131
_ч_
Гавриленко Сергей Алексеевич
пропущено...
Так ключевое поле или identity?

автор сам не знает

Уточняю:
Имя идентифицирующего столбца. Он же является первичным ключем. :)
25 фев 11, 14:52    [10290139]     Ответить | Цитировать Сообщить модератору
 Re: Как определить имя ключевого поля таблицы ?  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
SergT
kDnZP
SergT, sp_help

И что ей указать в качестве параметра чтобы получить имя столбца Identity ?


USE master
exec sp_helptext 'sp_help'

И получайте что нужно, в любом количестве)))
25 фев 11, 14:56    [10290171]     Ответить | Цитировать Сообщить модератору
 Re: Как определить имя ключевого поля таблицы ?  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
SergT
_ч_
пропущено...

автор сам не знает

Уточняю:
Имя идентифицирующего столбца. Он же является первичным ключем. :)


не всегда
25 фев 11, 15:33    [10290524]     Ответить | Цитировать Сообщить модератору
 Re: Как определить имя ключевого поля таблицы ?  [new]
SergT
Member

Откуда: Донецк
Сообщений: 131
Knyazev Alexey
SergT
пропущено...

Уточняю:
Имя идентифицирующего столбца. Он же является первичным ключем. :)


не всегда

Я имею ввиду в моем случае :)
25 фев 11, 15:53    [10290679]     Ответить | Цитировать Сообщить модератору
 Re: Как определить имя ключевого поля таблицы ?  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
У меня SQL Server 2008 R2 (Exp.Ed.)

Чтобы получить названия первичных ключей можно запустить вот такой код:
SELECT
	PK.name AS PrimaryKey,
	S.name AS [Schema],
	T.name AS TableName
FROM sys.all_objects AS PK
	INNER JOIN sys.all_objects AS T ON PK.parent_object_id = T.object_id
	INNER JOIN sys.schemas AS S ON T.schema_id = S.schema_id
WHERE PK.[type] = 'PK'

А чтобы добавить сюда названия полей (столбцов) можно запустить такой код:
SELECT
	PK.name AS PrimaryKey,
	S.name AS [Schema],
	T.name AS TableName,
	C.name AS [Column]
FROM sys.all_objects AS PK
	INNER JOIN sys.all_objects AS T ON PK.parent_object_id = T.object_id
	INNER JOIN sys.schemas AS S ON T.schema_id = S.schema_id
	INNER JOIN sys.columns AS C ON T.object_id = C.object_id
WHERE PK.[type] = 'PK'

Но в таком случае я получаю названия всех полей. А мне нужно только те, которые участвуют в первичном ключе.
Какой фильтр надо добавить в условие "WHERE"?

P.S. Речь идет о первичных ключах, которые не всегда Identity, а в некоторых таблицах в первичных ключах участвуют 2 и более полей.
Как быть?
23 окт 11, 15:57    [11485170]     Ответить | Цитировать Сообщить модератору
 Re: Как определить имя ключевого поля таблицы ?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
SET NOCOUNT ON;
USE tempdb;
IF OBJECT_ID(N'dbo.T','U') IS NOT NULL DROP TABLE T;
CREATE TABLE dbo.T(PK1 INT NOT NULL, PK2 DATETIME NOT NULL, PK3 DEC(38,0) NOT NULL, F1 CHAR, F2 INT, CONSTRAINT pkT PRIMARY KEY(PK1,PK2,PK3));

SELECT QUOTENAME([CONSTRAINT_NAME])[Primary Key], [ORDINAL_POSITION]
, CAST(QUOTENAME([TABLE_CATALOG])+'.'+QUOTENAME([TABLE_SCHEMA])+'.'+QUOTENAME([TABLE_NAME])+'.'+QUOTENAME([COLUMN_NAME]) AS NVARCHAR(530))[Primary Key Field]
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE [TABLE_SCHEMA]=N'dbo' AND [TABLE_NAME]=N'T'
ORDER BY [ORDINAL_POSITION];
23 окт 11, 17:26    [11485445]     Ответить | Цитировать Сообщить модератору
 Re: Как определить имя ключевого поля таблицы ?  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2845
iap,

Thank you very much!
То, что надо!
23 окт 11, 18:18    [11485579]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить