怎样判断表字段插入的值符合定义的数据类型要求

huangjing81 2008-01-24 11:29:14

------测试环境

CREATE TABLE [test] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[ColA] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[ColB] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[ColC] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO


CREATE TABLE [FieldValueType] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[字段名] [varchar] (30) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[字段类型] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO


insert into FieldValueType(字段名, 字段类型) values
('ColA' , 'float' )

insert into FieldValueType(字段名, 字段类型) values
('ColB' , 'datetime' )

insert into FieldValueType(字段名, 字段类型) values
('ColC' , 'float' )
----------------------------------------------------------------------

怎样实现在 test 表插入一条记录时,该记录各字段的数据类型符合 FieldValueType 表所定义的数据类型?在测试环境中即:
ColA——数字
ColB——日期时间
ColC——数字


实际环境中 test 表 字段很多,每个字段里所允许输入的值的数据类型都将在 FieldValueType 中进行定义,我现在的想法是在 test 表建立触发器(FOR INSERT,UPDATE),当更新数据时调用一个函数对输入的数据进行检查,如果不符合输入要求,则返回发生错误的那个字段名。
昨日苦想一天,不得其解,特来求助。


...全文
99 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangjing81 2008-01-26
  • 打赏
  • 举报
回复
完了,这贴子挂了。
昵称被占用了 2008-01-24
  • 打赏
  • 举报
回复
create trigger tr_Test
on Test
for insert,update
as
declare @Msg varchar(2000)
set @Msg=''
if exists (select 1 from inserted i,[FieldValueType] f where f.字段名='ColA'
and case when f.字段类型='float' and isnumeric(i.ColA)<>1 then 1
when f.字段类型='Datetime' and isdate(i.ColA)<>1 then 1
else 0
end=1
)
set @Msg=@Msg+'ColA 类型 错误 '
if exists (select 1 from inserted i,[FieldValueType] f where f.字段名='ColB'
and case when f.字段类型='float' and isnumeric(i.ColB)<>1 then 1
when f.字段类型='Datetime' and isdate(i.ColB)<>1 then 1
else 0
end=1
)
set @Msg=@Msg+'ColB 类型 错误 '
if exists (select 1 from inserted i,[FieldValueType] f where f.字段名='ColC'
and case when f.字段类型='float' and isnumeric(i.ColC)<>1 then 1
when f.字段类型='Datetime' and isdate(i.ColC)<>1 then 1
else 0
end=1
)
set @Msg=@Msg+'ColC 类型 错误 '

if @Msg<>''
begin
RAISERROR (@Msg,16,1)
ROLLBACK TRANSACTION
end
pt1314917 2008-01-24
  • 打赏
  • 举报
回复
想法不错,有点意思,先顶再看。。
liangCK 2008-01-24
  • 打赏
  • 举报
回复
这个估计麻烦.
在前台程序去做.
dawugui 2008-01-24
  • 打赏
  • 举报
回复
如果类型不对,插入时将会报错.
dawugui 2008-01-24
  • 打赏
  • 举报
回复
建议插入之前判断.
-狙击手- 2008-01-24
  • 打赏
  • 举报
回复
想想
huangjing81 2008-01-24
  • 打赏
  • 举报
回复
改前台当然是最好,但程序N年前已经做死了,这条路没戏。
huangjing81 2008-01-24
  • 打赏
  • 举报
回复
Haiwer 的做法是我每增加一个字段都要修改触发器,那样在字段较多的情况下会比较麻烦,有没有更刺激的办法?

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧