TSQL을 사용하여 테이블의 기본 키 결정
TSQL을 사용하여 테이블의 기본 키를 확인하고 싶습니다(저장된 프로시저 또는 시스템 테이블은 괜찮습니다).SQL Server(2005 또는 2008)에 이러한 메커니즘이 있습니까?
이를 통해 시작할 수 있습니다.
SELECT
*
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
JOIN
INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu
ON tc.CONSTRAINT_NAME = ccu.Constraint_name
WHERE
tc.TABLE_NAME = 'TableName' AND
tc.CONSTRAINT_TYPE = 'Primary Key'
어때.
sp_pkeys 'TableName'
다음은 SQL 2005의 시스템 테이블을 기반으로 한 것입니다(2008년에는 99%가 작동할 것으로 확신함).이렇게 하면 모든 사용자 정의 테이블에 대한 모든 PK가 나열되고 모든 열과 제거할 수 있는 일부 추가 플러프가 표시됩니다.한 번에 테이블을 선택하는 매개 변수를 추가합니다.
SELECT
schema_name(ta.schema_id) SchemaName
,ta.name TableName
,ind.name
,indcol.key_ordinal Ord
,col.name ColumnName
,ind.type_desc
,ind.fill_factor
from sys.tables ta
inner join sys.indexes ind
on ind.object_id = ta.object_id
inner join sys.index_columns indcol
on indcol.object_id = ta.object_id
and indcol.index_id = ind.index_id
inner join sys.columns col
on col.object_id = ta.object_id
and col.column_id = indcol.column_id
where ind.is_primary_key = 1
order by
ta.name
,indcol.key_ordinal
SELECT ccu.COLUMN_NAME, ccu.CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE AS ccu
ON tc.CONSTRAINT_NAME = ccu.CONSTRAINT_NAME
WHERE tc.TABLE_CATALOG = 'Your_Catalog' -- replace with your catalog
AND tc.TABLE_SCHEMA = 'dbo' -- replace with your schema
AND tc.TABLE_NAME = 'Your_Table' -- replace with your table name
AND tc.CONSTRAINT_TYPE = 'PRIMARY KEY'
exec [sys].[sp_primary_keys_rowset] @table_name= 'TableName'
EXEC sp_Pkeys @tableName
사용하는 것이 좋습니다.INFORMATION_SCHEMA.KEY_COLUMN_USAGE
주요 주문 정보에 액세스할 수 있으므로(ORDINAL_POSITION
) 이것은 매우 중요한 것입니다.
SELECT
kcu.*
FROM
INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
INNER JOIN
INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
ON tc.TABLE_NAME = kcu.TABLE_NAME AND
tc.CONSTRAINT_NAME = kcu.CONSTRAINT_NAME
ORDER BY
tc.TABLE_NAME,
tc.CONSTRAINT_NAME,
kcu.ORDINAL_POSITION
가장 간단한 방법은 이것입니다!
select object_id from sys.objects
where parent_object_id = OBJECT_ID(N'FACounty')
and [type] = N'PK'
코멘트를 추가할 수 없습니다. 충분한 리퍼포인트가 없습니다. 하지만 이것은 다음과 같은 사람들에 대한 답변입니다.sp_Pkeys
사용할 수 없습니다.답변에 대한 다른 설명에 언급된 기능일 필요는 없습니다.
DECLARE @tbl TABLE
(
Table_Qualifier varchar(30),
Table_Owner varchar(30),
Table_Name varchar(50),
Column_Name varchar(30),
Key_Seq int,
PK_Name varchar(50)
)
insert into @tbl EXEC sp_Pkeys 'tablename'
select * from @tbl
관심 있는 키의 이름을 이미 알고 있는 경우 다음 작업을 수행합니다.
-- Assuming you have schema "Example" and the primary key name is "PK_Item"
-- Notice that name of table is irrelevant here but is "Foobar" here
IF (OBJECT_ID('Example.PK_ITEM') IS NULL)
BEGIN
ALTER TABLE [Example].Foobar ADD CONSTRAINT
PK_Item PRIMARY KEY ...
END
언급URL : https://stackoverflow.com/questions/1525672/determine-a-tables-primary-key-using-tsql
'programing' 카테고리의 다른 글
git 원격 태그와 이름이 같은 로컬 분기 푸시 (0) | 2023.08.23 |
---|---|
Oracle SQL에서 결과를 한 행으로 제한하는 방법 (0) | 2023.08.23 |
Excel 매크로 - 줄 연속선이 너무 많음 (0) | 2023.08.23 |
쉼표로 구분된 값으로 두 테이블 결합 (0) | 2023.08.23 |
도커 1.9+에서 명명된 볼륨의 내용을 나열하는 방법은 무엇입니까? (0) | 2023.08.23 |