Saya ingin menentukan kunci utama suatu tabel menggunakan TSQL (prosedur tersimpan atau tabel sistem baik-baik saja). Apakah ada mekanisme seperti itu di SQL Server (2005 atau 2008)?
Tentukan kunci utama tabel menggunakan TSQL
Jawaban (8)
Ini seharusnya membuatmu memulai:
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'
ON tc.CONSTRAINT_NAME = ccu.CONSTRAINT_NAME AND tc.CONSTRAINT_SCHEMA = ccu.CONSTRAINT_SCHEMA
untuk beberapa skema
- person Bohdan; 11.01.2021
Bagaimana tentang
sp_pkeys 'TableName'
declare @PrimaryKey table (TABLE_QUALIFIER nvarchar(100), TABLE_OWNER nvarchar(100), TABLE_NAME nvarchar(100), COLUMN_NAME nvarchar(100), KEY_SEQ int, PK_NAME nvarchar(100))
dan kemudian insert into @PrimaryKey exec sp_pkeys 'TABLE_NAME'
- person Alexander Higgins; 02.12.2020
Ini yang berdasarkan tabel sistem dari SQL 2005 (99% yakin ini akan berfungsi pada tahun 2008). Ini akan mencantumkan semua PK untuk semua tabel yang ditentukan pengguna, dengan semua kolom dan beberapa bulu tambahan yang dapat dihapus. Tambahkan parameter untuk memilih tabel dalam satu waktu.
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
Lebih baik Anda menggunakan INFORMATION_SCHEMA.KEY_COLUMN_USAGE
, karena Anda dapat mengakses informasi pemesanan kunci (ORDINAL_POSITION
) yang sangat penting untuk diketahui.
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
Cara paling sederhana adalah ini!
select object_id from sys.objects
where parent_object_id = OBJECT_ID(N'FACounty')
and [type] = N'PK'
Tidak dapat menambahkan komentar, poin rep tidak cukup, tetapi ini sebagai tanggapan terhadap mereka yang mengatakan sp_Pkeys
tidak dapat digunakan. Tidak harus berupa fungsi seperti yang disebutkan dalam komentar lain untuk sebuah jawaban.
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
Jika Anda sudah mengetahui nama kunci yang Anda minati, berikut ini berfungsi:
-- 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