SQL Server触发器Trigger(1卡塔尔(قطر‎

省市区县数据来源Google地图. (包括34个省 , 371个市, 2824个县区) 复制代码 代码如下:
/**********创建省级表**********/ CREATE TABLE
T_Province ( ProID INT IDENTITY(1,1) PRIMARY KEY, –省份主键 ProName
NVARCHAR(50) NOT NULL, –省份名称 ProSort INT, –省份排序 ProRemark
NVARCHAR(50) –说明 ) Go 复制代码
代码如下: /********创建市级表********/ CREATE TABLE
T_City ( CityID INT IDENTITY(1,1) Primary KEY , –城市主键 CityName
NVARCHAR(50) NOT NULL, –城市名称 ProID INT, –所属省份 CitySort INT
–城市排序 ) 复制代码 代码如下:
/*********城市县区表*********/ CREATE TABLE
T_District ( Id INT IDENTITY(1,1) PRIMARY KEY, DisName NVARCHAR(30) NOT
NULL, –区县名称 CityID INT NOT NULL, –所属城市 DisSort INT –区县排序
) 数据下载地址: AllCityData

图片 1图片 2代码

为了演示,找出以前一个例子,第二个表,照代码执行,没有做出Foreign
key的约束,因为只是做了说明,参考下面例子,执行代码产生的表,才是真正做到Foreign
key的约束。

为了演示触发器,下面例子分别实现插入,删除触发器。

图片 3图片 4代码

图片 5图片 6代码

最后需要提及的,如果想把这个外键删除,可以使用下面SQL语句来实现:

 

–创建另外一个表[SubTopic],其中有一字段是表[Topic]的主键,即是Foreign key
CREATE TABLE dbo.SubTopic
(
    SubTopicId INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
    TopicId INT FOREIGN KEY REFERENCES dbo.Topic([TopicId]) ,–外键 reference table dbo.Topic primary key
    Author NVARCHAR(50) NOT NULL,
    Content NVARCHAR(4000) NOT NULL    
)
GO

 

ALTER TABLE [dbo].[SubTopic]  
DROP CONSTRAINT [FK_SubTopic_Topic]

CREATE TRIGGER dbo.tri_Topic_Delete ON dbo.Topic
FOR DELETE
AS
BEGIN
    SET NOCOUNT ON    
    DECLARE @key INT    
    SELECT @key = [TopicId] FROM deleted
    DELETE FROM [dbo].[SubTopic] WHERE [TopicId] = @key
END

 

GO

这种约束关系到两个表也可以是同一个表,被引用表(Referenced
table)中的定段一定是主键或唯一约束,不存在NULL,但是外键字段是允许NULL值的。

接下来,就是触发器实现代码,当有论题被回复时,在主表中的Reply字段加1。