sql server 2012使用触发器产生流水号并在另一库中创建与流水号有关的表
程序员文章站
2024-02-22 23:05:29
...
sql server 2012使用触发器产生流水号并在另一库中创建与流水号有关的表
有时候我们需要创建一个与流水号有关的表格,流水号可以根据日期来创建但我们不想把创建流水号有关的表放到同一个库中可以使用如下方法来创建,触发器笔者作了详细说明复制粘贴即可使用,只需将库名与表名还有字段修改成自已的库名与字段名。谨供参考
下面展示一些 内联代码片
。
USE [SecondSubjects]--第一个库名
GO
/****** Object: Trigger [dbo].[TR_Creat17c03xh] Script Date: 2021/5/9 23:53:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <杏雨>
-- Create date: <2021年5月7日>
-- Description: <Create [dbo].[vehicle_17c03]创建唯一备案序号并在[Vehicel_17C28]库创建与序号有关的表>
-- =============================================
CREATE TRIGGER [dbo].[TR_Creat17c03xh]
ON [dbo].[vehicle_17c03]
AFTER INSERT
AS
BEGIN
DECLARE @year NVARCHAR(10)--年
DECLARE @month NVARCHAR(10)--月
DECLARE @str NVARCHAR(10)--字符串变量(用来拼接流水号)
DECLARE @xh NVARCHAR(50)--序号(流水号8位)
DECLARE @xhmax NVARCHAR(50) --最大值
SET @year=DATENAME(yyyy, GETDATE())--获取年
SET @month=DATENAME(mm, GETDATE())--获取月
--SET @day=DATENAME(dd, GETDATE())
SET @str='0000'--赋值(如果想增加序号位数在这里增加零的个数)
SELECT @xhmax=MAX([id]) FROM vehicle_17c03 获取最大值(id为主键自增)
SET @xh=@year+@month+RIGHT(@str+@xhmax,4)--拼接字符串年月(取最右则4位加上id最大值)
UPDATE vehicle_17c03 SET xh=@xh WHERE id=@xhmax--创建流水号(当有插入操作时更新Xh字段并将流水号更新到xh字段)
DECLARE @tb NVARCHAR(50)--表名称(拼接@qz+@xh)接接原则为表名称不能以数字开头所以加一个固定前缀加流水号以方便将来查找
DECLARE @qz NVARCHAR(50)--表名称前缀
SET @qz ='Vehicel_'
SET @tb= @qz +@xh--拼接表名称
IF OBJECT_ID( @tb,N'U')IS NULL --如果表格不存在就创建表格(U:代表用户表缩写是sqlserver定义格式)
BEGIN
--由于触发器中不允许使用USE [Vehicel_17C28]所以这里将USE[Vehicel_17C28]拼到字符串中
--USE [Vehicel_17C28]第二个库名
EXEC( 'USE [Vehicel_17C28] CREATE TABLE [Vehicel_17C28].[dbo].[' +@tb +']
(
[id] INT PRIMARY KEY IDENTITY(1,1),
[xh] VARCHAR(50) NOT NULL,
[jd] DECIMAL(18,8) NOT NULL,
[wd] DECIMAL(18,8) NOT NULL,
[gd] DECIMAL(18,8) NOT NULL)')
END
END
GO
效果如下图所示
下一篇: sqlserver语法