首页 新闻 会员 周边

高手帮忙写一个存储过程

0
悬赏园豆:100 [已解决问题] 解决于 2008-05-22 17:32
<P>我现在有三个表其结构如下:</P> <P>CREATE TABLE [dbo].[UserInfo](<BR>&nbsp;[Phone]&nbsp;&nbsp;&nbsp;[nvarchar](50)&nbsp;&nbsp;COLLATE Chinese_PRC_CI_AS NOT NULL,<BR>&nbsp;[Name]&nbsp;&nbsp;&nbsp;[nvarchar](50)&nbsp;&nbsp;COLLATE Chinese_PRC_CI_AS NULL,<BR>&nbsp;[No]&nbsp;&nbsp;&nbsp;[numeric](18, 0)&nbsp;NULL, --身份证<BR>&nbsp;[Address]&nbsp;&nbsp;[nvarchar](255)&nbsp;&nbsp;COLLATE Chinese_PRC_CI_AS NULL,<BR>&nbsp;[CardType]&nbsp;&nbsp;[nvarchar](50)&nbsp;&nbsp;COLLATE Chinese_PRC_CI_AS NULL,<BR>&nbsp;[EnterDate]&nbsp;&nbsp;[nvarchar](50)&nbsp;&nbsp;COLLATE Chinese_PRC_CI_AS NULL,<BR>&nbsp;[Area]&nbsp;&nbsp;&nbsp;[nchar](10)&nbsp;&nbsp;&nbsp;COLLATE Chinese_PRC_CI_AS NULL,<BR>&nbsp;[Trad]&nbsp;&nbsp;&nbsp;[numeric](18, 0)&nbsp;NULL,<BR>&nbsp;[MobileModel]&nbsp;[nvarchar](255)&nbsp;&nbsp;COLLATE Chinese_PRC_CI_AS NULL,<BR>&nbsp;[GPRS]&nbsp;&nbsp;&nbsp;[numeric](18, 0)&nbsp;NULL<BR>) ON [PRIMARY]</P> <P>&nbsp;CREATE TABLE [dbo].[City](<BR>&nbsp;[ID] [int] IDENTITY(1,1) NOT NULL,<BR>&nbsp;[City] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL<BR>) ON [PRIMARY]</P> <P>CREATE TABLE [dbo].[CardType](<BR>&nbsp;[ID] [int] IDENTITY(1,1) NOT NULL,<BR>&nbsp;[CardType] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NULL<BR>) ON [PRIMARY]</P> <P>现在需要将[UserInfo]表中CardType字段的数据提取出来,放到[CardType]表中,而[UserInfo]表中的[CardType]字段保存[CardType]表对应的ID值,City字段也是如此。</P> <P>另外为了保证以后读取数据的速度需要添加两个字段:出生日期、性别,这两个字段的值来自No字段。其身份证规律如下:</P> <P>15位身份证号码:排列顺序从左至右依次为:六位数字地址码,六位数字出生日期码,三位数字顺序码,其中出生日期码不包含世纪数。<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>例: 510106(六位数字地址码) 830328(八位数字出生日期) 511(三位数字顺序码)&nbsp;<BR><BR><BR>18位身份证号码:公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。<BR><BR>例: 510106(六位数字地址码) 19830328(八位数字出生日期) 511(三位数字顺序码) 2(一位数字校验码)<BR></P> <P>其中三位数字顺序码中奇数为难,偶数为女。</P> <P>请哪位高手写个存储过程,谢谢!。</P>
SPARON的主页 SPARON | 初学一级 | 园豆:55
提问于:2008-05-22 14:28
< >
分享
最佳答案
0
写了一下将修改CardType的部分,剩下的你自己实现吧,关于身份证中提取日期建议在程序代码中做,你可以把数据读出来然后用c#转换出日期然后再保存回数据库。 [code] --第一步插入CardType数据 INSERT into [CardType] select distinct CardType from UserInfo where not exists (select * from cardtype c where c.CardType = userInfo.CardType) GO --第二步给UserInfo表添加列 alter table UserInfo add CardTypeID int null GO --第三步更新CardTypeID的值 update UserInfo SET CardTypeID = ct.ID FROM CardType ct WHERE ct.CardType = UserInfo.CardType GO --第四步去掉UserInfo中的CardType列 ALTER TABLE dbo.UserInfo DROP COLUMN CardType GO --第五步将新添加的列CardTypeID的名字修改为CardType EXECUTE sp_rename N'dbo.UserInfo.CardTypeID', N'Tmp_CardType', 'COLUMN' GO EXECUTE sp_rename N'dbo.UserInfo.Tmp_CardType', N'CardType', 'COLUMN' GO [/code] 身份证号转换生日,我写了一个转15位的,你可以参考一下: [code] create function getDateFromID( @id char(15) ) returns datetime as begin declare @birthPart char(6); set @birthPart = substring(@id,7,6); declare @year int; set @year = cast(left(@birthPart,2) as int); if @year < 10 SET @year = 2000 + @year; else SET @year = 1900 + @year; declare @birthday datetime; set @birthday = cast(cast(@year as char(4)) + '-' + substring(@birthpart,3,2) + '-' + substring(@birthpart,6,2) as datetime) return @birthday end GO declare @id char(16) set @id = '510106830328511'; print dbo.getDateFromID(@id) [/code]
玉开 | 大侠五级 |园豆:8822 | 2008-05-22 15:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册