QA@IT
«回答へ戻る

回答を投稿

指定したテーブルの主キー列を知りたいってこと?



use Northwind
go

declare @tablename varchar(64)
set @tablename = 'Order Details'

select syscolumns.name
from sysobjects
  inner join syscolumns on sysobjects.id = syscolumns.id
  inner join sysindexkeys on sysobjects.id = sysindexkeys.id and syscolumns.colid = sysindexkeys.colid
  inner join sysindexes on sysindexkeys.id = sysindexes.id and sysindexkeys.indid = sysindexes.indid
where sysobjects.type = 'U'
  and sysobjects.status > 0
  and sysobjects.name = @tablename
  and sysindexes.name in (
    select name
    from sysobjects
    where xtype = 'PK'
      and parent_obj = sysindexes.id
  )

ちなみに、こういった方法はあまり使わないほうが良いいよ。SQL Server 2005 で一部のシステムテーブルが統廃合されていて互換性が失われているし。どのような利用ケースかしらないけど、できることなら ADO や JDBC などのミドルウェア経由で 主キーを求めるのが良いかと。

投稿者:未記入

指定したテーブルの主キー列を知りたいってこと?


~~~


use Northwind
go

declare @tablename varchar(64)
set @tablename = 'Order Details'

select syscolumns.name
from sysobjects
  inner join syscolumns on sysobjects.id = syscolumns.id
  inner join sysindexkeys on sysobjects.id = sysindexkeys.id and syscolumns.colid = sysindexkeys.colid
  inner join sysindexes on sysindexkeys.id = sysindexes.id and sysindexkeys.indid = sysindexes.indid
where sysobjects.type = 'U'
  and sysobjects.status > 0
  and sysobjects.name = @tablename
  and sysindexes.name in (
    select name
    from sysobjects
    where xtype = 'PK'
      and parent_obj = sysindexes.id
  )

~~~


ちなみに、こういった方法はあまり使わないほうが良いいよ。SQL Server 2005 で一部のシステムテーブルが統廃合されていて互換性が失われているし。どのような利用ケースかしらないけど、できることなら ADO や JDBC などのミドルウェア経由で 主キーを求めるのが良いかと。


投稿者:未記入