主键自增的触发器 怎么写

sinat_19562755 2014-08-15 11:23:20


我现在有这么一张表 主键是 nvarchar(6)的类型,如果第一个是 DeptCD为:100000,在新增数据的时候 写个主键自增的触发器" max([DeptCD])+1 " 就不要每次都去查询一次
各位大侠帮我看看是什么问题
ALTER trigger [dbo].[Dept_B_trigger]
on [dbo].[Dept_B]
for insert ,update


as
begin
declare @deptID nvarchar(6)
SELECT @deptID=max([DeptCD])+1 FROM [Dept_B]

update instead set DeptCD=@deptID
end ;
...全文
166 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
---涛声依旧--- 2014-08-15
  • 打赏
  • 举报
回复
当然用触发器也是可行的了,不过楼主写的有问题 另外,若有特殊编码规则的,也可以写一个函数,然后放在默认值里也行 下面请参考:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		Rocky
-- Create date: 2013-09-09
-- Description:	获取请假单编号,编码原则:QJ+年月日(6位)+流水号(4位)
-- =============================================
ALTER FUNCTION [dbo].[ufn_GetLeaveNo]()
RETURNS VARCHAR(20)
AS
BEGIN
	-- Declare the return variable here
	DECLARE @Form_No VARCHAR(20)
	DECLARE @Temp VARCHAR(20)
	
	SET @Temp=''
	SET @Form_No='QJ'+CONVERT(VARCHAR(6),GETDATE(),12)

	-- Add the T-SQL statements to compute the return value here
	SELECT @Temp=MAX(Form_No)
	FROM dbo.Att_Leave t (NOLOCK)
	WHERE Form_No LIKE @Form_No+'%'
	
	IF @Temp IS NULL
		BEGIN
			SET @Form_No=@Form_No+'00001'
		END
	ELSE
		BEGIN
			SET @Temp=RIGHT(100000+RIGHT(@Temp,5)+1,5)
			SET @Form_No=@Form_No+@Temp
		END
	-- Return the result of the function
	RETURN @Form_No
END
sinat_19562755 2014-08-15
  • 打赏
  • 举报
回复
引用 1 楼 rockyljt 的回复:
如果没有特殊编码规则的话,建议直接用sql server的自增列啊
这个就是有特殊要求才这样做的
---涛声依旧--- 2014-08-15
  • 打赏
  • 举报
回复
如果没有特殊编码规则的话,建议直接用sql server的自增列啊

27,579

社区成员

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

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