[SQL] SQL 서버 : 사용하여 테이블의 기본 키를 얻기 SQL 쿼리 [중복]
SQLSQL 서버 : 사용하여 테이블의 기본 키를 얻기 SQL 쿼리 [중복]
나는 SQL Server 데이터베이스에 대한 SQL 쿼리를 사용하여 특정 테이블의 기본 키를 싶어.
MySQL의에서 나는 테이블의 기본 키를 얻기 위해 다음 쿼리를 사용하고 있습니다 :
SHOW KEYS FROM tablename WHERE Key_name = 'PRIMARY'
어떻게 SQL Server에 대한 위의 쿼리와 동일?.
MySQL과 SQL 서버 모두에 대해 작동하는 쿼리가있는 경우 다음 그것은 이상적인 경우 일 것이다.
해결법
-
==============================
1.또한 SQL Server에 대한 또 다른 하나를 발견 :
또한 SQL Server에 대한 또 다른 하나를 발견 :
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE OBJECTPROPERTY(OBJECT_ID(CONSTRAINT_SCHEMA + '.' + QUOTENAME(CONSTRAINT_NAME)), 'IsPrimaryKey') = 1 AND TABLE_NAME = 'TableName' AND TABLE_SCHEMA = 'Schema'
-
==============================
2.또 다른 하나를 찾을 수 :
또 다른 하나를 찾을 수 :
SELECT KU.table_name as TABLENAME,column_name as PRIMARYKEYCOLUMN FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS TC INNER JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS KU ON TC.CONSTRAINT_TYPE = 'PRIMARY KEY' AND TC.CONSTRAINT_NAME = KU.CONSTRAINT_NAME AND KU.table_name='yourTableName' ORDER BY KU.TABLE_NAME, KU.ORDINAL_POSITION;
나는 SQL 서버 2,005 분의 2,003에 검사를하지
-
==============================
3.SQL 서버 2005을 사용하면, 당신은 시도 할 수 있습니다
SQL 서버 2005을 사용하면, 당신은 시도 할 수 있습니다
SELECT i.name AS IndexName, OBJECT_NAME(ic.OBJECT_ID) AS TableName, COL_NAME(ic.OBJECT_ID,ic.column_id) AS ColumnName FROM sys.indexes AS i INNER JOIN sys.index_columns AS ic ON i.OBJECT_ID = ic.OBJECT_ID AND i.index_id = ic.index_id WHERE i.is_primary_key = 1
- 2005 - SQL 서버에서 찾을 데이터베이스에서 기본 키 제약 조건으로 찾기 테이블
-
==============================
4.메모리에서,이 중이이다
메모리에서,이 중이이다
SELECT * FROM sys.objects WHERE type = 'PK' AND object_id = OBJECT_ID ('tableName')
아니면 이거..
SELECT * FROM sys.objects WHERE type = 'PK' AND parent_object_id = OBJECT_ID ('tableName')
나는 그들 중 하나는 아마도 데이터가 저장되는 방식에 따라 작동합니다 생각 하지만 난 실제로 같은를 확인하려면 SQL에 액세스 할 수 없습니다 두렵다.
-
==============================
5.
SELECT COLUMN_NAME FROM {DATABASENAME}.INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME LIKE '{TABLENAME}' AND CONSTRAINT_NAME LIKE 'PK%'
-
==============================
6.
select * from sysobjects where xtype='pk' and parent_obj in (select id from sysobjects where name='tablename')
이 SQL 2005에서 작동합니다
-
==============================
7.이것은 모든 제약 조건을 나열해야하고 마지막에 당신은 당신의 필터를 넣을 수 있습니다
이것은 모든 제약 조건을 나열해야하고 마지막에 당신은 당신의 필터를 넣을 수 있습니다
/* CAST IS DONE , SO THAT OUTPUT INTEXT FILE REMAINS WITH SCREEN LIMIT*/ WITH ALL_KEYS_IN_TABLE (CONSTRAINT_NAME,CONSTRAINT_TYPE,PARENT_TABLE_NAME,PARENT_COL_NAME,PARENT_COL_NAME_DATA_TYPE,REFERENCE_TABLE_NAME,REFERENCE_COL_NAME) AS ( SELECT CONSTRAINT_NAME= CAST (PKnUKEY.name AS VARCHAR(30)) , CONSTRAINT_TYPE=CAST (PKnUKEY.type_desc AS VARCHAR(30)) , PARENT_TABLE_NAME=CAST (PKnUTable.name AS VARCHAR(30)) , PARENT_COL_NAME=CAST ( PKnUKEYCol.name AS VARCHAR(30)) , PARENT_COL_NAME_DATA_TYPE= oParentColDtl.DATA_TYPE, REFERENCE_TABLE_NAME='' , REFERENCE_COL_NAME='' FROM sys.key_constraints as PKnUKEY INNER JOIN sys.tables as PKnUTable ON PKnUTable.object_id = PKnUKEY.parent_object_id INNER JOIN sys.index_columns as PKnUColIdx ON PKnUColIdx.object_id = PKnUTable.object_id AND PKnUColIdx.index_id = PKnUKEY.unique_index_id INNER JOIN sys.columns as PKnUKEYCol ON PKnUKEYCol.object_id = PKnUTable.object_id AND PKnUKEYCol.column_id = PKnUColIdx.column_id INNER JOIN INFORMATION_SCHEMA.COLUMNS oParentColDtl ON oParentColDtl.TABLE_NAME=PKnUTable.name AND oParentColDtl.COLUMN_NAME=PKnUKEYCol.name UNION ALL SELECT CONSTRAINT_NAME= CAST (oConstraint.name AS VARCHAR(30)) , CONSTRAINT_TYPE='FK', PARENT_TABLE_NAME=CAST (oParent.name AS VARCHAR(30)) , PARENT_COL_NAME=CAST ( oParentCol.name AS VARCHAR(30)) , PARENT_COL_NAME_DATA_TYPE= oParentColDtl.DATA_TYPE, REFERENCE_TABLE_NAME=CAST ( oReference.name AS VARCHAR(30)) , REFERENCE_COL_NAME=CAST (oReferenceCol.name AS VARCHAR(30)) FROM sys.foreign_key_columns FKC INNER JOIN sys.sysobjects oConstraint ON FKC.constraint_object_id=oConstraint.id INNER JOIN sys.sysobjects oParent ON FKC.parent_object_id=oParent.id INNER JOIN sys.all_columns oParentCol ON FKC.parent_object_id=oParentCol.object_id /* ID of the object to which this column belongs.*/ AND FKC.parent_column_id=oParentCol.column_id/* ID of the column. Is unique within the object.Column IDs might not be sequential.*/ INNER JOIN sys.sysobjects oReference ON FKC.referenced_object_id=oReference.id INNER JOIN INFORMATION_SCHEMA.COLUMNS oParentColDtl ON oParentColDtl.TABLE_NAME=oParent.name AND oParentColDtl.COLUMN_NAME=oParentCol.name INNER JOIN sys.all_columns oReferenceCol ON FKC.referenced_object_id=oReferenceCol.object_id /* ID of the object to which this column belongs.*/ AND FKC.referenced_column_id=oReferenceCol.column_id/* ID of the column. Is unique within the object.Column IDs might not be sequential.*/ ) select * from ALL_KEYS_IN_TABLE where PARENT_TABLE_NAME in ('YOUR_TABLE_NAME') or REFERENCE_TABLE_NAME in ('YOUR_TABLE_NAME') ORDER BY PARENT_TABLE_NAME,CONSTRAINT_NAME;
http://blogs.msdn.com/b/sqltips/archive/2005/09/16/469136.aspx - 참고 통해 읽어 주시기 바랍니다
-
==============================
8.당신이 정확한 차 필드를 얻으려면 당신이 상태로 TABLE_NAME 및 TABLE_SCHEMA을 둘 필요가 있음을 유의하십시오.
당신이 정확한 차 필드를 얻으려면 당신이 상태로 TABLE_NAME 및 TABLE_SCHEMA을 둘 필요가 있음을 유의하십시오.
이 솔루션은 작동합니다 :
select COLUMN_NAME from information_schema.KEY_COLUMN_USAGE where CONSTRAINT_NAME='PRIMARY' AND TABLE_NAME='TABLENAME' AND TABLE_SCHEMA='DATABASENAME'
-
==============================
9.나는 당신을주지 코드뿐만 아니라 키,하지만 SQL Server에서 테이블의 데이터를 많이 작동하고 검색합니다. SQL 서버 2K5 / 2K8에서 테스트되어, 2K에 대해 몰라. 즐겨!
나는 당신을주지 코드뿐만 아니라 키,하지만 SQL Server에서 테이블의 데이터를 많이 작동하고 검색합니다. SQL 서버 2K5 / 2K8에서 테스트되어, 2K에 대해 몰라. 즐겨!
SELECT DISTINCT sys.tables.object_id AS TableId, sys.columns.column_id AS ColumnId, sys.columns.name AS ColumnName, sys.types.name AS TypeName, sys.columns.precision AS NumericPrecision, sys.columns.scale AS NumericScale, sys.columns.is_nullable AS IsNullable, ( SELECT COUNT(column_name) FROM INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE WHERE TABLE_NAME = sys.tables.name AND CONSTRAINT_NAME = ( SELECT constraint_name FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = sys.tables.name AND constraint_type = 'PRIMARY KEY' AND COLUMN_NAME = sys.columns.name ) ) AS IsPrimaryKey, sys.columns.max_length / 2 AS CharMaxLength /*BUG*/ FROM sys.columns, sys.types, sys.tables WHERE sys.tables.object_id = sys.columns.object_id AND sys.types.system_type_id = sys.columns.system_type_id AND sys.types.user_type_id = sys.columns.user_type_id AND sys.tables.name = 'TABLE' ORDER BY IsPrimaryKey
당신은 기본 키 부분을 사용할 수 있습니다,하지만 난 나머지는 편리한 될 수도 있다고 생각합니다. 친애하는, 데이비드
-
==============================
10.그것은 BOL에 따라 ... 또한 (Transact-SQL)를 참조하십시오입니다.
그것은 BOL에 따라 ... 또한 (Transact-SQL)를 참조하십시오입니다.
-- exec sp_serveroption 'SERVER NAME', 'data access', 'true' --execute once EXEC sp_primarykeys @table_server = N'server_name', @table_name = N'table_name', @table_catalog = N'db_name', @table_schema = N'schema_name'; --frequently 'dbo'
from https://stackoverflow.com/questions/3930338/sql-server-get-table-primary-key-using-sql-query by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] Grails의 SQL 문을 기록하는 방법 (0) | 2020.04.01 |
---|---|
[SQL] 어떻게 PostgreSQL의에서 함수 내부에서 SELECT의 결과를 반환하는? (0) | 2020.04.01 |
[SQL] 어떻게 프로그램에 DbContext.SaveChanges ()에서 생성 된 SQL을 기록 할 수 있습니까? [복제] (0) | 2020.04.01 |
[SQL] SQL Server의 선두에 제로 패딩으로 숫자 서식 (0) | 2020.04.01 |
[SQL] SQL 쿼리는 SQL 서버에서 날짜를 삽입 (0) | 2020.04.01 |