sqlserver 触发器学习(实现自动编号)
前段时间需要用触发器做个实现数据插入表时自动编号的功能,于是再学习下触发器,硬件备份共享于此,以供讨论,以免遗忘
总结常用基本点如下:1、触发器有两种类型:数据定义语言触发器(DDL触发器)和数据操纵语言触发器(DML触发器)。
DDL触发器:在用户对数据库执行数据定义(CREATE、ALTER、DROP或相似的语句)对数据库结构进行修改时激活而做出响应。
DML触发器:在用户对数据库执行数据操作时发生,触发器中的代码会被自动调用。
2、DML触发器分类:Insert触发器、Delete触发器、Update触发器、上面任意类型混合。
3、触发器创建语法:
代码如下:
CREATE TRIGGER
ON
{{{FOR|AFTER} }|INSTEAN OF}
AS
4、触发器必须附加到表或视图上,触发器不能单独存在。AFTER或FOR触发器不支持视图,INSTEAD OF支持表或视图。
5、INSERT触发器中,SQL Server 会创建一个插入行的副本,并把该副本插入到一个特殊表Insert表中,该表只在触发器作用域内存在。
6、DELETE触发器中,SQL Server 会创建一个删除行的副本,并把该副本插入到一个特殊表Delete表中,该表只在触发器作用域内存在。
7、UPDATE触发器中,SQL Server认为更新的记录是删除了现有的记录,插入更新后的新纪录,所以UPDATE触发器中包含Insert和Delete两个特殊表,也是只存在触发器作用域内,这两个表的行数完全一样。
8、触发器尽可能简短,因为触发器和触发器内的语句被一同处理,即直到语句执行完成才算是触发器完成。如果代码很长那触发器运行时间就会很长。
下面是个实现自动编号功能的例子:
代码如下:
--有两张表,客户表和项目表,要求:新建项目时自动生成项目编号,每个不同的客户的项目的编号从1开始
--项目编号格式为PJ+"-"+"客户编号"+"-"+"日期"+"-"+"流水号"
--如项目编号:PJ-ABCD-120805-0001
create table testAccount --创建测试客户表
(
tAccName nvarchar(100), --客户姓名
tAccId nvarchar(32) --客户编号
)
create table testProject --创建测试项目表
(
tProName nvarchar(100), --项目名称
tProId nvarchar(32), --项目编号
tIdAcc nvarchar(100), --客户编号
tProGuid nvarchar(64) --guid
)
go
create trigger T_AutoNumber
on testProject
after insert
as
begin
declare @one nvarchar(8), --编号第一部分,PJ
@two nvarchar(32), --编号第二部分,客户编号
@three nvarchar(8), --编号第三部分,日期
@four int, --编号第四部分,流水号
@guid nvarchar(64) --guid
set @one='PJ'
set @three= convert( varchar(8),GETDATE(),112)
--从Inserted副本表里获取当前插入数据的客户编码和guid
select @two=tIdAcc,@guid=tProGuid from Inserted
--获取编号最后四位
select @four=max(cast(right(tProId,4)as int))
from testProject
where tIdAcc=@two
--对每一个新客户的流水号都是从1开始,已存在客户为最大流水号加1
if @four is null
set @four=0
else
set @four=cast(@four as int)
set @four=@four+1
update testProject set tProId=@one+'-'+@two+'-'+@three+'-'+right('0000'+cast(@four as varchar),4) where tProGuid=@guid
end
go
--生成测试表数据
insert into testAccount values ('小小鸭有限公司','XXYGS')
insert into testAccount values ('丑小鸭有限公司','CXY')
insert into testProject (tProName,tIdAcc,tProGuid)values ('小鸭成长项目','XXYGS',newid())
insert into testProject (tProName,tIdAcc,tProGuid)values ('小鸭学游泳项目','XXYGS',newid())
insert into testProject (tProName,tIdAcc,tProGuid)values ('丑小鸭成长项目','CXY',newid())
select * from testProject
drop table testAccount
drop table testProject
9.调试触发器:新建查询窗口,输入下来代码,按下F11即可逐语句运行下列脚本,进入到触发器中。也可在触发器里设置断点,然后按F11逐语句执行。
代码如下:
begin tran
insert into testProject (tProName,tIdAcc,tProGuid)values ('小鸭成长项目','XXYGS',newid())
insert into testProject (tProName,tIdAcc,tProGuid)values ('小鸭学游泳项目','XXYGS',newid())
insert into testProject (tProName,tIdAcc,tProGuid)values ('丑小鸭成长项目','CXY',newid())
if @@TRANCOUNT>0
rollback tran

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Für Objekte mit demselben Namen, die bereits in der SQL Server-Datenbank vorhanden sind, müssen folgende Schritte ausgeführt werden: Bestätigen Sie den Objekttyp (Tabelle, Ansicht, gespeicherte Prozedur). Mit IF NOT EXISTS kann die Erstellung übersprungen werden, wenn das Objekt leer ist. Wenn das Objekt Daten enthält, verwenden Sie einen anderen Namen oder ändern Sie die Struktur. Verwenden Sie DROP, um vorhandene Objekte zu löschen (Vorsicht, Sicherung empfohlen). Suchen Sie nach Schemaänderungen, um sicherzustellen, dass keine Verweise auf gelöschte oder umbenannte Objekte vorhanden sind.

Die Importschritte sind wie folgt: Kopieren Sie die MDF-Datei in das Datenverzeichnis von SQL Server (normalerweise C:\Programme\Microsoft SQL Server\MSSQL\DATA). Öffnen Sie in SQL Server Management Studio (SSMS) die Datenbank und wählen Sie Anhängen aus. Klicken Sie auf die Schaltfläche „Hinzufügen“ und wählen Sie die MDF-Datei aus. Bestätigen Sie den Datenbanknamen und klicken Sie auf die Schaltfläche OK.

Wenn der SQL Server-Dienst nicht gestartet werden kann, können Sie die folgenden Schritte beheben: Überprüfen Sie das Fehlerprotokoll, um die Grundursache zu ermitteln. Stellen Sie sicher, dass das Dienstkonto über die Berechtigung zum Starten des Dienstes verfügt. Überprüfen Sie, ob Abhängigkeitsdienste ausgeführt werden. Deaktivieren Sie die Antivirensoftware. Reparieren Sie die SQL Server-Installation. Wenn die Reparatur nicht funktioniert, installieren Sie SQL Server neu.

So zeigen Sie die SQL Server-Portnummer an: Öffnen Sie SSMS und stellen Sie eine Verbindung zum Server her. Suchen Sie den Servernamen im Objekt-Explorer, klicken Sie mit der rechten Maustaste darauf und wählen Sie Eigenschaften. Sehen Sie sich auf der Registerkarte „Verbindung“ das Feld „TCP-Port“ an.

SQL Server-Datenbankdateien werden normalerweise am folgenden Standardspeicherort gespeichert: Windows: C:\Programme\Microsoft SQL Server\MSSQL\DATALinux: /var/opt/mssql/data Der Speicherort der Datenbankdatei kann durch Ändern des Datenbankdateipfads angepasst werden Einstellung.

Wenn Sie eine SQL Server-Datenbank versehentlich löschen, können Sie die Datenbankaktivität stoppen; Party-Tools. Bitte sichern Sie Ihre Datenbank regelmäßig und aktivieren Sie die Transaktionsprotokollierung, um Datenverlust zu verhindern.

Wenn die SQL Server-Installation fehlschlägt, können Sie sie mit den folgenden Schritten bereinigen: Deinstallieren Sie SQL Server. Löschen Sie Registrierungsschlüssel. Löschen Sie Dateien und Ordner. Starten Sie den Computer neu

Die englische Installation von SQL Server kann wie folgt geändert werden: Laden Sie den SQL Server-Dienst herunter. Ändern Sie die Sprache der Benutzeroberfläche.
