文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>关于sql server中主键的一点研究

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

时间:2010-09-27  来源:shiyuping

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,1) NOT NULL,
    [pname] [varchar](128) NOT 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  = ON) ON [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](10) NOT NULL,
    [pk2] [nchar](10) NOT NULL,
    [pk3] [nchar](10) NOT 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  = ON) ON [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(@tablename, 1, @i)
    if not @tmp is  null
    insert into @tmpkey select @tmp
    set @i = @i + 1
end
select * from @tmpkey

 

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

相关阅读 更多 +
排行榜 更多 +
别惹神枪手安卓版

别惹神枪手安卓版

冒险解谜 下载
坦克战争世界

坦克战争世界

模拟经营 下载
丛林反击战

丛林反击战

飞行射击 下载