2012-04-24 62 views
0

鑑於以下T-SQL語句,我(通過檢查)如何確定主鍵?如果它沒有列出(像我懷疑)它會是什麼樣子?從SQL Server語句確定主鍵

CREATE TABLE [dbo].[BLDGINFO](
    [LBLDGRUNNO] [int] NULL, 
    [LBLDGNO] [int] NOT NULL, 
    [FBIVOLUME] [float] NULL, 
    [FBIACOND] [float] NULL, 
    [NBIHTYPE] [float] NULL, 
    [NBILTYPE] [float] NULL, 
    [NBISTORIES] [float] NULL, 
    [NBIFTYPE] [float] NULL, 
    [NBIBEDS] [float] NULL, 
    [NBIUNITS] [float] NULL, 
    [SBIRATENO] [nvarchar](31) NULL, 
    [NBICTYPE] [float] NULL, 
    [NBIYEARBLT] [int] NULL DEFAULT ((0)), 
    [NBITHBNDRY] [int] NULL 
) ON [PRIMARY] 
+1

正如BluesRockAddict指出的那樣...此示例沒有定義主鍵。 – RThomas 2012-04-24 06:16:34

回答

1

如果主鍵已經定義完畢,將會是LBLDGNO。但是,很可能根本沒有定義主鍵。您可以如下確定:

SELECT c.name 
FROM sys.indexes i, sys.index_columns ic, sys.objects o, sys.columns c 
WHERE o.object_id = i.object_id 
AND ic.index_id = i.index_id AND ic.object_id = i.object_id 
AND c.object_id = o.object_id AND c.column_id = ic.column_id 
AND i.is_primary_key = 1 
AND o.name = 'BLDGINFO' 

此查詢將返回包含在主鍵中的所有列。如果它返回一個空的結果集,那麼沒有定義主鍵。

+0

這太棒了!謝謝! – rh0dium 2012-04-24 12:33:58

1

在你的問題表定義不包含主鍵,這裏是被定義爲ID列主鍵爲例:

CREATE TABLE [dbo].[BLDGINFO](
    id int NOT NULL, 
    [LBLDGRUNNO] [int] NULL, 
    [LBLDGNO] [int] NOT NULL, 
    [FBIVOLUME] [float] NULL, 
    [FBIACOND] [float] NULL, 
    [NBIHTYPE] [float] NULL, 
    [NBILTYPE] [float] NULL, 
    [NBISTORIES] [float] NULL, 
    [NBIFTYPE] [float] NULL, 
    [NBIBEDS] [float] NULL, 
    [NBIUNITS] [float] NULL, 
    [SBIRATENO] [nvarchar](31) NULL, 
    [NBICTYPE] [float] NULL, 
    [NBIYEARBLT] [int] NULL DEFAULT ((0)), 
    [NBITHBNDRY] [int] NULL, 
    PRIMARY KEY (id) 
) ON [PRIMARY] 
+0

所以它看起來和直接的SQL非常相似。有趣的,因爲我還沒有看到這一點。 – rh0dium 2012-04-24 12:26:45

2

表格中的唯一字段可能可以工作作爲主鍵是LBLDGNO,因爲主鍵列不能爲空。

+0

啊,我沒聽懂!但是,它不需要是唯一的嗎?因此,當我正在處理這個問題時,我發現以「L」開頭的字段似乎是假的外鍵。在MSSQL中可以使用外鍵作爲主鍵嗎? – rh0dium 2012-04-24 12:29:16

+0

您不能將外鍵用作主鍵,因爲它們是不同的約束。但是,字段可能同時屬於主鍵和外鍵,就像在創建1-1關係時一樣。主鍵確實需要是唯一的,但這個約束是由外鍵應用的,而不是由表定義本身應用的。 – Peter 2012-04-24 13:52:49