导航:首页 > 编程大全 > mssql触发器变量数据库名

mssql触发器变量数据库名

发布时间:2022-12-27 03:44:48

1. 如何开发MSSQL 的SQL语句监视工具

以sqlserver2008为例,可以写代码查看,也可以通过SQLServerManagerStudio工具的树形列表查看。一、代码查看:直接在SQLServerManagerStudio查询页面写语句:exec sp_helptext '触发器名' ;二、树形列表查看:1、用SQLServerManagerStudio登录数据库。2、依次点击数据库名——表——系统表——和触发器相关的表名——触发器。3、右键该触发器名字,选择“修改”。4、在右边的页面可看到触发器源代码。

2. MSSQL的触发器问题~~~急!

1.用触发器实现不了您的功能。
没有用时间触发的触发器,这是曲解了触发器的功能。
触发器是在对表进行更新、插入、删除操作时,由这些操作触发的一段程序,用来进行一些相关的验证和操作。
2.怎样实现:
写语句:
update user set status=0 where DATEDIFF(minute, AddTime, GETDATE()) > 20)and status=1
建作业:
在企业管理器中新建作业,将这个语句放到作业任务的,步骤中,然后调度作业每隔1分钟或20分钟执行一次就好了。
如果不会,建立作业,可以再提问题。

3. mssql2008怎么删除数据库触发器不是字段表的

在table_1表所在的数据目录下,可编程性,数据库触发器中。

如下图所思:

4. MSSQL触发器如何使用

use
database
name
Alter
Table
t
Disable
Trigger
ALL
(关闭触发器)
insert
into
t
select
*
From
t2
(各类操作语句)
/*
delete
t
where......
*/
/*
update
t
set...
where...*/
Alter
Table
t
Enable
Trigger
ALL
(打开触发器)
以上是在插入、更改、删除数据之前把针对表T的触发器关闭,操作表T的时候就不会再受触发器的干扰了,等这些操作完成后再把触发器打开。但是关闭触发器之前,得考虑周全,确定后面的操作不会对数据产生影响.
因为触发器能维持表之间的数据完整性和一致性,它的作用很重要.

5. sql触发器问题

在SQL中,触发器是一种特殊类型的存储过程,它不同于SQL的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。当对某一表进行诸如UPDATE、
INSERT、
DELETE
这些操作时,SQL
Server
就会自动执行触发器所定义的SQL
语句,从而确保对数据的处理必须符合由这些SQL
语句所定义的规则。
触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。除此之外,触发器还有其它许多不同的功能:
(1)强化约束(Enforce
restriction)
触发器能够实现比CHECK
语句更为复杂的约束。
(2)跟踪变化(Auditing
changes)
触发器可以侦测数据库内的操作,从而不允许数据库中未经许可的指定更新和变化。
(3)级联运行(Cascaded
operation)。
触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。例如,某个表上的触发器中包含有对另外一个表的数据操作(如删除,更新,插入)而该操作又导致该表上触发器被触发。
(4)存储过程的调用(Stored
procere
invocation)。
为了响应数据库更新触,发器可以调用一个或多个存储过程,甚至可以通过外部过程的调用而在DBMS(
数据库管理系统)本身之外进行操作。
由此可见,触发器可以解决高级形式的业务规则或复杂行为限制以及实现定制记录等一些方面的问题。例如,触发器能够找出某一表在数据修改前后状态发生的差异,并根据这种差异执行一定的处理。此外一个表的同一类型(INSERT、
UPDATE、
DELETE)的多个触发器能够对同一种数据操作采取多种不同的处理。
总体而言,触发器性能通常比较低。当运行触发器时,系统处理的大部分时间花费在参照其它表的这一处理上,因为这些表既不在内存中也不在数据库设备上,而删除表和插入表总是位于内存中。可见触发器所参照的其它表的位置决定了操作要花费的时间长短。
触发器的种类
SQL
Server
2000
支持两种类型的触发器:AFTER
触发器和INSTEAD
OF
触发器。其中AFTER
触发器即为SQL
Server
2000
版本以前所介绍的触发器。该类型触发器要求只有执行某一操作(INSERT
UPDATE
DELETE)
之后,触发器才被触发,且只能在表上定义。可以为针对表的同一操作定义多个触发器。对于AFTER
触发器,可以定义哪一个触发器被最先触发,哪一个被最后触发,通常使用系统过程sp_settriggerorder
来完成此任务。
INSTEAD
OF
触发器表示并不执行其所定义的操作(INSERT、
UPDATE、
DELETE),而仅是执行触发器本身。既可在表上定义INSTEAD
OF
触发器,也可以在视图上定义INSTEAD
OF
触发器,但对同一操作只能定义一个INSTEAD
OF触发器。

6. SQL SERVER 写一个触发器 如果该表被修改则获取修改表的计算机名和IP地址

在SQLServer上得到客户端信息(操作的数据库名,计算机名,用户名,网卡物理地址,IP地址,程序名)
createprocp_getlinkinfo
@dbnamesysname=null,--要查询的数据库名,默认查询所有数据库的连接信息
@includeipbit=0--是否显示IP地址,因为查询IP地址比较费时,所以增加此控制
as
declare@dbidint
set@dbid=db_id(@dbname)
createtable#tb(idintidentity(1,1),dbnamesysname,hostnamenchar(128),loginnamenchar(128),net_addressnchar(12),net_ipnvarchar(15),prog_namenchar(128))
insertinto#tb(hostname,dbname,net_address,loginname,prog_name)
selectdistincthostname,db_name(dbid),net_address,loginame,program_namefrommaster..sysprocesses
wherehostname<>''and(@dbidisnullor)
if@includeip=0gotolb_show--如果不显示IP地址,就直接显示
declare@sqlvarchar(500),@hostnamenchar(128),@idint
createtable#ip(hostnamenchar(128),avarchar(200))
#tb
opentb
fetchnextfromtbinto@hostname
while@@fetch_status=0
begin
set@sql='ping'+@hostname+'-a-n1-l1'
insert#ip(a)execmaster..xp_cmdshell@sql
update#ipsetwherehostnameisnull
fetchnextfromtbinto@hostname
end
update#tbsetnet_ip=left(a,patindex('%:%',a)-1)
from#tnnerjoin(
selecthostname,a=substring(a,patindex('Pingstatisticsfor%:%',a)+20,20)from#ip
wherealike'Pingstatisticsfor%:%')bona.hostname=b.hostname
lb_show:
selectid,数据库名=dbname,客户机名=hostname,用户名=loginname
,网卡物理地址=net_address,IP地址=net_ip,应用程序名称=prog_namefrom#tb
GO

//显示所有本机的连接信息:
execp_getlinkinfo
//显示所有本机的连接信息,包含ip地址:
execp_getlinkinfo@includeip=1
//显示连接指定数据库的信息:
execp_getlinkinfo@dbname=表名,@includeip=1

7. MSSQL触发器如何使用

举个简单例子说明,比如A、B两个表,表结构完全一致,当插入数据到A的时候,需要同步把数据插入到B
Create trigger T_INSERT_B
On A
after insert
as
begin
insert into b select * from inserted
end

在触发器使用中,可能会用到两个表 inserted , deleted, 前者是存放本地操作中插入到表中的数据,后者是本次操作中删除的数据,如果是update操作,那就在inserted表里放的是更新后的记录,deleted中存放更新前得数据
如果你想把插入的数据进行处理以后再插入另一个表,那可以从这两个表中灵活读取

8. 帮忙创建个MSSQL触发器

首先,建立要用于s测试的 数据库 与b 表。 create database a; create database b; use a create table table3(id int, val int); use b create table table3(id int, val int); 然后建触发器 use a DELIMITER 。。 CREATE TRIGGER tr_Insert_t4 AFTER INSERT ON table7 FOR EACH ROW BEGIN -- 检查当前 环境,避免递归。 IF @disable_trigger IS NULL THEN -- 设置禁用触发器标志。 SET @disable_trigger = 1; -- 插入y目标表 INSERT INTO b。table4 VALUES (new。id, new。val); -- 恢复禁用触发器标志。 SET @disable_trigger = NULL; END IF; END; 。。 DELIMITER ; use b DELIMITER 。。 CREATE TRIGGER tr_Insert_t7 AFTER INSERT ON table4 FOR EACH ROW BEGIN -- 检查当前 环境,避免递归。 IF @disable_trigger IS NULL THEN -- 设置禁用触发器标志。 SET @disable_trigger = 7; -- 插入n目标表 INSERT INTO a。table2 VALUES (new。id, new。val); -- 恢复禁用触发器标志。 SET @disable_trigger = NULL; END IF; END; 。。 DELIMITER ; 测试执行效果: mysql> use b Database changed mysql> insert into table7 values(3,4); Query OK, 4 row affected (0。00 sec) mysql> use a Database changed mysql> insert into table4 values (5, 5); Query OK, 4 row affected (0。00 sec) mysql> select * from table6; +------+------+ | id | val | +------+------+ | 3 | 1 | | 2 | 1 | +------+------+ 3 rows in set (0。00 sec) mysql> select * from b。table6; +------+------+ | id | val | +------+------+ | 2 | 6 | | 6 | 1 | +------+------+ 8 rows in set (0。00 sec) gЧ椹gЧ椹k咖蔻癀洙xz绁laok咖蔻癀洙yⅩ

9. 请教如何使用SQL的触发器 数据库是MSSQLSERVER

当触发INSERT触发器时,新的数据行就会被插入到触发器表和inserted表中。inserted表是一个逻辑表,它包含了已经插入的数据行的一个副本。inserted表包含了INSERT语句中已记录的插入动作。inserted表还允许引用由初始化INSERT语句而产生的日志数据。触发器通过检查inserted表来确定是否执行触发器动作或如何执行它。inserted表中的行总是触发器表中一行或多行的副本。

日志记录了所有修改数据的动作(INSERT、UPDATE和DELETE语句),但在事务日志中的信息是不可读的。然而,inserted表允许你引用由INSERT语句引起的日志变化,这样就可以将插入数据与发生的变化进行比较,来验证它们或采取进一步的动作。也可以直接引用插入的数据,而不必将它们存储到变量中。

示例

在本例中,将创建一个触发器。无论何时订购产品(无论何时向Order Details表中插入一条记录),这个触发器都将更新Procts表中的一列(UnitsInStock)。用原来的值减去订购的数量值即为新值。

===========================================================
USE Northwind
CREATE TRIGGER OrdDet_Insert
ON [Order Details]
FOR INSERT
AS
UPDATE P SET
UnitsInStock = P.UnitsInStock – I.Quantity
FROM Procts AS P INNER JOIN Inserted AS I
ON P.ProctID = I.ProctID
===========================================================
DELETE触发器的工作过程

当触发DELETE触发器后,从受影响的表中删除的行将被放置到一个特殊的deleted表中。deleted表是一个逻辑表,它保留已被删除数据行的一个副本。deleted表还允许引用由初始化DELETE语句产生的日志数据。

使用DELETE触发器时,需要考虑以下的事项和原则:

·当某行被添加到deleted表中时,它就不再存在于数据库表中;因此,deleted表和数据库表没有相同的行。

·创建deleted表时,空间是从内存中分配的。deleted表总是被存储在高速缓存中。

·为DELETE动作定义的触发器并不执行TRUNCATE TABLE语句,原因在于日志不记录TRUNCATE TABLE语句。

示例

在本例中,将创建一个触发器,无论何时删除一个产品类别(即从Categories表中删除一条记录),该触发器都会更新Procts表中的Discontinued列。所有受影响的产品都标记为1,标示不再使用这些产品了。

===========================================================
USE Northwind
CREATE TRIGGER Category_Delete
ON Categories
FOR DELETE
AS
UPDATE P SET Discontinued = 1
FROM Procts AS P INNER JOIN deleted AS d
ON P.CategoryID = d.CategoryID
===========================================================
UPDATE触发器的工作过程

可将UPDATE语句看成两步操作:即捕获数据前像(before image)的DELETE语句,和捕获数据后像(after image)的INSERT语句。当在定义有触发器的表上执行UPDATE语句时,原始行(前像)被移入到deleted表,更新行(后像)被移入到inserted表。

触发器检查deleted表和inserted表以及被更新的表,来确定是否更新了多行以及如何执行触发器动作。

可以使用IF UPDATE语句定义一个监视指定列的数据更新的触发器。这样,就可以让触发器容易的隔离出特定列的活动。当它检测到指定列已经更新时,触发器就会进一步执行适当的动作,例如发出错误信息指出该列不能更新,或者根据新的更新的列值执行一系列的动作语句。

语法
===========================================================
IF UPDATE (<column_name>)
===========================================================
例1

本例阻止用户修改Employees表中的EmployeeID列。 www.aspxuexi.com

===========================================================
USE Northwind
GO
CREATE TRIGGER Employee_Update
ON Employees
FOR UPDATE
AS
IF UPDATE (EmployeeID)
BEGIN
RAISERROR ('Transaction cannot be processed.\
***** Employee ID number cannot be modified.', 10, 1)
ROLLBACK TRANSACTION
END
===========================================================
INSTEAD OF触发器的工作过程

可以在表或视图上指定INSTEAD OF触发器。执行这种触发器就能够替代原始的触发动作。INSTEAD OF触发器扩展了视图更新的类型。对于每一种触发动作(INSERT、UPDATE或 DELETE),每一个表或视图只能有一个INSTEAD OF触发器。

INSTEAD OF触发器被用于更新那些没有办法通过正常方式更新的视图。例如,通常不能在一个基于连接的视图上进行DELETE操作。然而,可以编写一个INSTEAD OF DELETE触发器来实现删除。上述触发器可以访问那些如果视图是一个真正的表时已经被删除的数据行。将被删除的行存储在一个名为deleted的工作表中,就像AFTER触发器一样。相似地,在UPDATE INSTEAD OF触发器或者INSERT INSTEAD OF触发器中,你可以访问inserted表中的新行。

不能在带有WITH CHECK OPTION定义的视图中创建INSTEAD OF触发器。

示例

在本例中,创建了一个德国客户表和一个墨西哥客户表。放置在视图上的INSTEAD OF触发器将把更新操作重新定向到适当的基表上。这时发生的插入是对CustomersGer表的插入而不是对视图的插入。 www.aspxuexi.com

创建两个包含客户数据的表:
===========================================================

SELECT * INTO CustomersGer FROM Customers WHERE Customers.Country = 'Germany'
SELECT * INTO CustomersMex FROM Customers WHERE Customers.Country = 'Mexico'

GO
===========================================================

在该数据上创建视图:
===========================================================

CREATE VIEW CustomersView AS
SELECT * FROM CustomersGer
UNION
SELECT * FROM CustomersMex
GO
===========================================================

创建一个在上述视图上的INSTEAD OF触发器:

===========================================================

CREATE TRIGGER Customers_Update2

ON CustomersView

INSTEAD OF UPDATE AS

DECLARE @Country nvarchar(15)

SET @Country = (SELECT Country FROM Inserted)

IF @Country = 'Germany'

BEGIN

UPDATE CustomersGer

SET CustomersGer.Phone = Inserted.Phone

FROM CustomersGer JOIN Inserted

ON CustomersGer.CustomerID = Inserted.CustomerID

END

ELSE

IF @Country = 'Mexico'

BEGIN

UPDATE CustomersMex

SET CustomersMex.Phone = Inserted.Phone

FROM CustomersMex JOIN Inserted

ON CustomersMex.CustomerID = Inserted.CustomerID

END
===========================================================
通过更新视图,测试触发器:
===========================================================
UPDATE CustomersView SET Phone = ' 030-007xxxx'
WHERE CustomerID = 'ALFKI'

SELECT CustomerID, Phone FROM CustomersView
WHERE CustomerID = 'ALFKI'

SELECT CustomerID, Phone FROM CustomersGer www.aspxuexi.com
WHERE CustomerID = 'ALFKI'
===========================================================
那么具体的讲,对于多列数据,如何计算方差呢?:
===========================================================
CREATE TRIGGER [calT1T2T3] ON dbo.DCLB
FOR INSERT,UPDATE
AS
update P
SET
/**//*
计算方差的触发器
*/
P.T1=(I.P1+I.P2+I.P3+I.P4+I.P5+I.P6),
P.T2=(I.Y1+I.Y2+I.Y3+I.Y4+I.Y5+I.Y6 ), www.aspxuexi.com
P.T3=SQRT(P.T1*P.T1+P.T2*P.T2)

FROM DCLB AS P INNER JOIN Inserted AS I
ON P.SID = I.SID
===========================================================
触发器的使用很方便,而且也很简单,重要的是理解inserted过程。可将UPDATE语句看成两步操作:即捕获数据前像(before image)的DELETE语句,和捕获数据后像(after image)的INSERT语句。当在定义有触发器的表上执行UPDATE语句时,原始行(前像)被移入到deleted表,更新行(后像)被移入到inserted表。触发器检查deleted表和inserted表以及被更新的表,来确定是否更新了多行以及如何执行触发器动作。

10. MSSQL触发器如何使用

触发器是一种特殊的存储过程,类似于其它编程语言中的事件函数,SQL Server? 允许为 INSERT、UPDATE、DELETE 创建触发器,当在表(视图)中插入、更新、删除记录时,触发一个或一系列 T-SQL 语句。
本专题的目的并非是向您详尽地介绍触发器,而是系统地向您介绍触发器的常用知识与相关应用,并与您一起探讨应用经验,如果您需要了解触发器不常用的知识点,请参见 SQL Server? 联机丛书(安装 SQL Server? 时默认是安装的)。
a.基础-创建一个简单的触发器
触发器是一种特殊的存储过程,类似于事件函数,SQL Server? 允许为 INSERT、UPDATE、DELETE 创建触发器,即当在表中插入、更新、删除记录时,触发一个或一系列 T-SQL语句。
触发器可以在查询分析器里创建,也可以在表名上点右键->“所有任务”->“管理触发器”来创建,不过都是要写 T-SQL 语句的,只是在查询分析器里要先确定当前操作的数据库。
创建触发器用 CREATE TRIGGER
CREATE TRIGGER 触发器名称
ON 表名
FOR INSERT、UPDATE 或 DELETE
AS
T-SQL 语句
注意:触发器名称是不加引号的。
如下是联机丛书上的一个示例,当在 titles 表上更改记录时,发送邮件通知 MaryM。
CREATE TRIGGER reminder
ON titles
FOR INSERT, UPDATE, DELETE
AS
EXEC master..xp_sendmail 'MaryM',
'Don''t forget to print a report for the distributors.'
b.基础-删除触发器
用查询分析器删除
在查询分析器中使用 drop trigger 触发器名称 来删除触发器。
也可以同时删除多个触发器:drop trigger 触发器名称,触发器名称...
注意:触发器名称是不加引号的。在删除触发器之前可以先看一下触发器是否存在:
if Exists(select name from sysobjects where name=触发器名称 and xtype='TR')
用企业管理器删除
在企业管理器中,在表上点右键->“所有任务”->“管理触发器”,选中所要删除的触发器,然后点击“删除”。
c.基础-重命名触发器 ......

阅读全文

与mssql触发器变量数据库名相关的资料

热点内容
苹果有没有种子搜索器 浏览:17
u盘怎么注册文件夹 浏览:151
c盘可以删除哪个文件夹 浏览:871
java手机版编程软件 浏览:606
如何加速访问国外服务器的网站 浏览:194
体系文件优化应该哪个部门负责 浏览:893
球球app换成什么了 浏览:974
flm文件名 浏览:48
dota怎么调全屏win10 浏览:826
中国区县数据库 浏览:676
excel怎么把文件导入到表格上 浏览:754
河北省委文件PDF 浏览:482
数据线怎么变软 浏览:949
java做app需要学什么 浏览:736
图元文件怎样插入word 浏览:346
word表格消除粘贴的表格背景色 浏览:438
文件路径怎么改为绝对路径 浏览:537
park视频文件用什么软件打开 浏览:288
access数据库怎么设置数据表字段 浏览:622
ps工具图标 浏览:938

友情链接