關于數據表之間的約束關系用什么方法比較好﹖

lzhiqiu 2004-01-07 07:15:38
有几個問題請教各位高手﹕

1﹑有兩個表 gpi 和 mastpay
現在想讓 gpi.pi_payno 一定是 mastpay.pay_no中的取值

我發現有兩種方法可以實現﹐一個是建立關聯﹐另一個是在gpi中寫觸發器﹐如果想在違反約束時出現自己定義的提示﹐是不是應該寫觸發器才行﹖用關聯建立的約束有沒有辦法控制提示信息呢﹖

2﹑在存儲過程中使用 Raiserror 彈出的提示中前面總會帶一長串附加字串﹐有什么辦法去掉嗎﹖

3﹑1中的兩個表之間的約束﹐是建立關聯好呢還是寫觸發器好﹖不用兩個都寫吧﹖我覺得建立關聯的話不用寫程序倒是挺方便的﹐只是提示不太友好﹐看上去不爽。不知大家有什么好的解決辦法﹖
...全文
98 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzhiqiu 2004-01-09
  • 打赏
  • 举报
回复
呵呵﹐多谢各位的热心回复﹗昨天有事没有上线﹐今天才看到﹐不好意思啊。
还有一些问题﹕

第二个问题中的Raiserror还是会附加字符串的﹐并且我还发现如果不在程序中写错误处理代码的话(就是 ON ERROR GOTO …)﹐存储过程执行到Raiserror时就会出现错误﹕程序执行错误什幺的﹐后面加一串错误代码﹐然后才是我在Raiserror中想让显示的代码。如果只是想让存储过程弹出一提示信息﹐而不是错误信息有没有办法﹖我用Print好象没有什幺效果﹐不知Print主要用来做什幺的﹖

To : zjcxc(邹建)
关于您回答的第三个问题﹐我有一些疑问﹕
1﹑我现在用的是SQL SERVER 7.0﹐不知道为什幺﹐我在建立关联之后﹐如果想修改mastpay中已经存在并且gpi中也已经用过的pay_no时﹐系统会提示不让修改﹐好象有一个叫做级联修改﹐级联删除的﹐可是我不知道怎幺实现﹐还是SQL SERVER 7.0没有提供这个功能﹖如果是这样的话﹐是不是只能通过写触发器来实现级联的功能﹖
2﹑您说用关联的时候在后台修改也可以得到错误信息﹐如果用触发器好象也可以得到错误信息的﹖我觉得这两种方法在这一点上应该没有什幺分别吧﹖
3﹑另外错误信息的问题﹐是否如下﹕
Select Case ErrorNo.
Case 1 …
Case 2 …
End Select
如果是这样的话﹐我不知道这个ErrorNo怎幺才能知道是个什幺数字呢﹖然后每个具体的数字再对应相应的信息﹖这个问题不知道应该怎幺做﹖另外如果在触发器中定义了多种类似的约束关系的话就更不容易判断了啊。
是否需要用sp_addmessage将错误信息及提示加入系统中去﹐如果是的话我想再问一个问题﹕自定义的错误信息是用另外的存储过程一次性加入系统中去还是在每个存储过程中用到该信息的地方再加入呢﹖如果是后者的话应该怎样去判断该错误信息是否已经存在系统中﹖另外如果需要将资料转入另一个SQL SERVER中的话是否需要同时将master库也转过去才能将自定义的错误信息自动全部转入﹖

呵呵﹐由于刚刚接触SQL下面的编程﹐所以一下子提了这幺多问题﹐还请多多指教啊﹐多谢﹐多谢﹐非常感谢﹗
zjcxc 2004-01-07
  • 打赏
  • 举报
回复
1.用关系及触发器均可达到目的,都可以拦截错误得到提示信息,只不过用触发器得到的提示信息是可以控制的而已.

2.不能去掉

3.我个人的看法是写关联比较好.这样,在后台修改数据也可以保证得到错误提示.
至于错误提示信息的问题,完全可以在前台拦截错误,然后用自己的错误提示信息来显示给用户.
leeboyan 2004-01-07
  • 打赏
  • 举报
回复
我不会,帮你顶!
1ssp 2004-01-07
  • 打赏
  • 举报
回复
我认为:在存储过程中,写代码约束,返回成功信息.好
xhwly 2004-01-07
  • 打赏
  • 举报
回复
外鍵約束沒有辦法控制提示信息。但外鍵約束最簡單有效。
而觸發器便於控制,所以一般應用則用外鍵約束,如果一定要有自定義提示,則用觸發器。

用raiserror彈出的提示不會附帶字串啊!

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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