关于sql server中主键的一点研究

sql server中对于主键的查询没有直接的方法,如果使用ado.net进行查询的话,返回的结果集如果是datatable类型的,一般并不包含主键信息,需要设置MissingSchemaAction,如何在sql语句中查询主键信息,经过一番周折,终于搞出来了,下边直接贴代码吧:

数据库代码:

代码
USE [TestDB]
GO
/****** Object:  Table [dbo].[province]    Script Date: 09/27/2010 23:11:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[province](
    
[pid] [int] IDENTITY(1,1NOT NULL,
    
[pname] [varchar](128NOT NULL,
    
[posttime] [datetime] NOT NULL,
 
CONSTRAINT [PK_province] PRIMARY KEY CLUSTERED 
(
    
[pid] ASC
)
WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ONON [PRIMARY]
ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
/****** Object:  Table [dbo].[testkey]    Script Date: 09/27/2010 23:11:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[testkey](
    
[id] [int] NOT NULL,
    
[pk1] [nchar](10NOT NULL,
    
[pk2] [nchar](10NOT NULL,
    
[pk3] [nchar](10NOT NULL,
    
[posttime] [datetime] NULL,
    
[pid] [int] NOT NULL,
 
CONSTRAINT [PK_testkey] PRIMARY KEY CLUSTERED 
(
    
[id] ASC,
    
[pk1] ASC,
    
[pk2] ASC,
    
[pk3] ASC
)
WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ONON [PRIMARY]
ON [PRIMARY]
GO
/****** Object:  Default [DF_province_posttime]    Script Date: 09/27/2010 23:11:37 ******/
ALTER TABLE [dbo].[province] ADD  CONSTRAINT [DF_province_posttime]  DEFAULT (getdate()) FOR [posttime]
GO
/****** Object:  ForeignKey [FK_testkey_province]    Script Date: 09/27/2010 23:11:37 ******/
ALTER TABLE [dbo].[testkey]  WITH CHECK ADD  CONSTRAINT [FK_testkey_province] FOREIGN KEY([pid])
REFERENCES [dbo].[province] ([pid])
GO
ALTER TABLE [dbo].[testkey] CHECK CONSTRAINT [FK_testkey_province]
GO

 下面是我最终获取主键的方法:

代码
declare @tmpkey table(id varchar(64))
declare @tablename varchar(256)
set @tablename = 'testkey'
declare @tmp  varchar(64)
declare @i int
set @i = 1
while @i <= 16
begin
    
select @tmp = index_col(@tablename1@i)
    
if not @tmp is  null
    
insert into @tmpkey select @tmp
    
set @i = @i + 1
end
select * from @tmpkey

总结:感觉学的越多,越感觉自己无知,要学的东西还很多很多,第一篇,希望大家多多拍砖。 

原文地址:https://www.cnblogs.com/supperniu/p/1837189.html