Hm. Funkade inte för mig. Men jag kör den här fete jäveln som fungerar:
SELECT (SELECT COLUMNPROPERTY(OBJECT_ID('Subscriber_sub'), INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME
, 'IsIdentity')) AS IsIdentity,(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 = 'Subscriber_sub' 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,(ISNULL((SELECT TOP 1 CASE INFORMATION_SCHEMA.TABLE_CONSTRAINTS.CONSTRAINT_TYPE WHEN 'FOREIGN 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 = 'Subscriber_sub' AND INFORMATION_SCHEMA.KEY_COLUMN_USAGE.COLUMN_NAME =
INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME AND INFORMATION_SCHEMA.TABLE_CONSTRAINTS.CONSTRAINT_TYPE = 'FOREIGN KEY'
), 0)) AS IsForeignKey, (ISNULL((SELECT TOP 1 CASE INFORMATION_SCHEMA.TABLE_CONSTRAINTS.CONSTRAINT_TYPE WHEN 'UNIQUE' 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 = 'Subscriber_sub' AND INFORMATION_SCHEMA.KEY_COLUMN_USAGE.COLUMN_NAME =
INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME AND INFORMATION_SCHEMA.TABLE_CONSTRAINTS.CONSTRAINT_TYPE = 'UNIQUE'
), 0)) AS HasUniqueConstraint FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Subscriber_sub'
Då får jag reda på att inga av fälten är primärnyckel. Det är konstigt, för tittar jag i valfritt GUI ser jag att det finns en liten nyckel på en av kolumnerna. Om jag genererar ett CREATE-skript för tabellen får jag följande:
if exists (select * from sysobjects where id = object_id(N'[dbo].[Subscriber_sub]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[Subscriber_sub]
GO
CREATE TABLE [dbo].[Subscriber_sub] (
[Id] [int] IDENTITY (1, 1) NOT NULL ,
[Email] [varchar] (255) NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Subscriber_sub] WITH NOCHECK ADD
CONSTRAINT [PK_Subscriber_sub] PRIMARY KEY NONCLUSTERED
(
[Id]
) WITH FILLFACTOR = 90 ON [PRIMARY]
GO
Kan man se på det generade scriptet vad som är fel med primärnyckeln? Är det ett index och inte en primärnyckel eller vad är det egentligen?
SELECT kcu.*
FROM information_schema.key_column_usage kcu INNER JOIN
information_schema.table_constraints tc ON
tc.constraints_catalog = kcu.constraints_catalog AND
tc.constraints_schema = kcu.constraints_schema AND
tc.constraints_name = kcu.constraints_name
WHERE constraint_type = 'PRIMARY KEY' AND
table_catalog = 'tavlingar' AND
table_schema = 'dbo' AND table_name = 'Subscriber_sub'
Ger följande fel:
Invalid column name 'constraints_catalog'
Invalid column name 'constraints_catalog'
Invalid column name 'constraints_name'
Invalid column name 'constraints_name'
Invalid column name 'constraints_schema'
Invalid column name 'constraints_schema'
Ambiguous column name 'table_name'
Ambiguous column name 'table_schema'
Ambiguous column name 'table_catalog'
Då ändrar jag till
SELECT kcu.*
FROM information_schema.key_column_usage kcu INNER JOIN
information_schema.table_constraints tc ON
tc.constraints_catalog = kcu.constraints_catalog AND
tc.constraints_schema = kcu.constraints_schema AND
tc.constraints_name = kcu.constraints_name
WHERE constraint_type = 'PRIMARY KEY' AND
tc.table_catalog = 'tavlingar' AND tc.table_schema = 'dbo' AND
tc.table_name = 'Subscriber_sub'
och får då bara felen
Invalid column name 'constraints_catalog'
Invalid column name 'constraints_catalog'
Invalid column name 'constraints_name'
Invalid column name 'constraints_name'
Invalid column name 'constraints_schema'
Invalid column name 'constraints_schema'
SELECT kcu.*
FROM information_schema.key_column_usage kcu INNER JOIN
information_schema.table_constraints tc ON
tc.constraint_catalog = kcu.constraint_catalog AND
tc.constraint_schema = kcu.constraint_schema AND
tc.constraint_name = kcu.constraint_name
WHERE constraint_type = 'PRIMARY KEY' AND
kcu.table_catalog = 'tavlingar' AND
kcu.table_schema = 'dbo' AND
kcu.table_name = 'Subscriber_sub'