SQL sever2008触发器应用

戏作三昧 2018-12-24 04:09:44
定义一个触发器对输入的学号进行检查其前4个字符应该是2014,学号总长度限制为11. 萌新求解,看了很多文章,看不懂,请问,这个应该怎么写啊?
...全文
216 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yolyry 2018-12-26
  • 打赏
  • 举报
回复
建议使用检查约束,版主讲的已经非常完美了
吉普赛的歌 2018-12-24
  • 打赏
  • 举报
回复
用检查约束就好了, 不用什么触发器:
USE tempdb
GO
IF OBJECT_ID('t') IS NOT NULL
	DROP TABLE t
GO
CREATE TABLE t(
	sno VARCHAR(20)	
)
GO
ALTER TABLE t ADD CONSTRAINT CK_t_sno CHECK (LEN(sno)=11 AND LEFT(sno,4)='2014'); 
GO
INSERT INTO t VALUES ('201402')
/*
消息 547,级别 16,状态 0,第 12 行
INSERT 语句与 CHECK 约束"CK_t_sno"冲突。该冲突发生于数据库"tempdb",表"dbo.t", column 'sno'。
语句已终止。
*/
INSERT INTO t VALUES ('20001234567')
/*
消息 547,级别 16,状态 0,第 18 行
INSERT 语句与 CHECK 约束"CK_t_sno"冲突。该冲突发生于数据库"tempdb",表"dbo.t", column 'sno'。
语句已终止。
*/
 INSERT INTO t VALUES ('20141234567')
/*
(1 行受影响)
*/
Dear SQL(燊) 2018-12-24
  • 打赏
  • 举报
回复
业务逻辑不要用触发器实现,用业务代码去判断
二月十六 2018-12-24
  • 打赏
  • 举报
回复
那里不会?触发器怎么写应该会了吧,看了很多文章,下边是前四位和长度11
DECLARE @str NVARCHAR(20)='20141123123'
SELECT LEFT(@str,4),--读取前四个
LEN(@str) --读取长度

11,849

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 非技术版
社区管理员
  • 非技术版社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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