kristoffer
2003-03-22, 00:11
Jag skapar en tabell enligt: CREATE TABLE test (
id int IDENTITY (1, 1) PRIMARY KEY,
foo varchar(255)
)
Jag gör detta mot en SQL Server 7 med versionsnummer: Microsoft SQL Server 7.00 - 7.00.1063 (Intel X86)
Apr 9 2002 14:18:16
Copyright (c) 1988-2002 Microsoft Corporation
Small Business Server Edition on Windows NT 4.0 (Build 1381: Service Pack 6)
Följande sql-fråga skall kontrollera om vart och ett av fälten är primärnyckel.SELECT (ISNULL
((SELECT TOP 1 CASE INFORMATION_SCHEMA.TABLE_CONSTRAINTS.CONSTRAINT_TYPE
WHEN 'PRIMARY KEY' THEN 1 END
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE INNER
JOIN
INFORMATION_SCHEMA.TABLE_CONSTRAINTS ON
INFORMATION_SCHEMA.KEY_COLUMN_USAGE.CONSTRAINT_NAME
= INFORMATION_SCHEMA.TABLE_CONSTRAINTS.CONSTRAINT_NAME
WHERE INFORMATION_SCHEMA.KEY_COLUMN_USAGE.TABLE_NAME
= 'test' AND
INFORMATION_SCHEMA.KEY_COLUMN_USAGE.COLUMN_NAME
= INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME AND
INFORMATION_SCHEMA.TABLE_CONSTRAINTS.CONSTRAINT_TYPE
= 'PRIMARY KEY'), 0)) AS IsPrimaryKey
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'test' När jag kör den frågan i Enterprise Manager får jag som resultat att fältet id är primärnyckel. Men när jag kör frågan i Query Tool (using ADO) (http://gpoulose.home.att.net/) eller i Database Gate (http://www.sgr.info/) eller i LLBLGen (http://www.sd.nl/software/) eller nåt annat liknande program så får jag som resultat att fältet id INTE är primärnyckel. Inget fält överhuvudtaget är då primärnyckel! Vad beror skillnaderna på? Service Pack 4 är ju installerat.
id int IDENTITY (1, 1) PRIMARY KEY,
foo varchar(255)
)
Jag gör detta mot en SQL Server 7 med versionsnummer: Microsoft SQL Server 7.00 - 7.00.1063 (Intel X86)
Apr 9 2002 14:18:16
Copyright (c) 1988-2002 Microsoft Corporation
Small Business Server Edition on Windows NT 4.0 (Build 1381: Service Pack 6)
Följande sql-fråga skall kontrollera om vart och ett av fälten är primärnyckel.SELECT (ISNULL
((SELECT TOP 1 CASE INFORMATION_SCHEMA.TABLE_CONSTRAINTS.CONSTRAINT_TYPE
WHEN 'PRIMARY KEY' THEN 1 END
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE INNER
JOIN
INFORMATION_SCHEMA.TABLE_CONSTRAINTS ON
INFORMATION_SCHEMA.KEY_COLUMN_USAGE.CONSTRAINT_NAME
= INFORMATION_SCHEMA.TABLE_CONSTRAINTS.CONSTRAINT_NAME
WHERE INFORMATION_SCHEMA.KEY_COLUMN_USAGE.TABLE_NAME
= 'test' AND
INFORMATION_SCHEMA.KEY_COLUMN_USAGE.COLUMN_NAME
= INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME AND
INFORMATION_SCHEMA.TABLE_CONSTRAINTS.CONSTRAINT_TYPE
= 'PRIMARY KEY'), 0)) AS IsPrimaryKey
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'test' När jag kör den frågan i Enterprise Manager får jag som resultat att fältet id är primärnyckel. Men när jag kör frågan i Query Tool (using ADO) (http://gpoulose.home.att.net/) eller i Database Gate (http://www.sgr.info/) eller i LLBLGen (http://www.sd.nl/software/) eller nåt annat liknande program så får jag som resultat att fältet id INTE är primärnyckel. Inget fält överhuvudtaget är då primärnyckel! Vad beror skillnaderna på? Service Pack 4 är ju installerat.