A. sql。。删除指定表的触发器求助。。
因为你的IF语句的有效范围只到raiserror('你不能删除该表',16,1)
不管IF是否成立,rollback
tran都会被执行的。
我没有检查是否还有其它错误,针对不执行的问题解决方法是
create
trigger
safety
on
database
for
drop_table
as
declare
@data
xml
declare
@schemaname
nvarchar(max)
declare
@tablename
nvarchar(max)
set
@data=eventdata()
select
@schemaname=eventdata().value('(/EVENT_INSTANCE/SCHEMANAME)[1]','nvarchar(max)')
select
@tablename=eventdata().value('(/EVENT_INSTANCE/OBJECTNAME)[1]','nvarchar(max)')
if
@schemaname='dbo'and
@tablename='a'
begin
raiserror('你不能删除该表',16,1)
rollback
tran
end
B. 创建了个有逻辑错误的sqlserver2008登录触发器怎么办
限制修改可以使用for UPDATE 触发器结合事务操作,如果更新了限制字段则报错并回滚更改操
C. 如何获取 sqlserver table ddl
DDL运用场景(DDL Scene)
(一) 首先我们来看一个简单的例子:创建数据库DDL_DB和一个名为DatabaseLog的表,现在创建一个DDL触发器:禁止用户修改和删除表,并进行提醒。执行下面的SQL脚本进行测试。
--Script1:
--创建测试数据库
USE MASTER
GO
CREATE DATABASE DDL_DB
--创建DDL触发器记录表
USE DDL_DB
GO
CREATE TABLE [dbo].[DatabaseLog](
[DatabaseLogID] [int] IDENTITY(1,1) NOT NULL,
[PostTime] [datetime] NOT NULL,
[ServerName] [sysname] NOT NULL,
[LoginName] [sysname] NOT NULL,
[DatabaseUser] [sysname] NOT NULL,
[DatabaseName] [sysname] NOT NULL,
[Schema] [sysname] NULL,
[Object] [sysname] NULL,
[TSQL] [nvarchar](max) NOT NULL,
[Event] [sysname] NOT NULL,
[XmlEvent] [xml] NOT NULL,
CONSTRAINT [PK_DatabaseLog_DatabaseLogID] PRIMARY KEY NONCLUSTERED
(
[DatabaseLogID] ASC
) ON [PRIMARY]
) ON [PRIMARY]
--Script2:
--创建DDL触发器:禁止修改或者删除数据表
CREATE TRIGGER DDL_TableTrigger
ON DATABASE
FOR DROP_TABLE, ALTER_TABLE
AS
PRINT '对不起,您不能对数据表进行操作,请联系DBA'
ROLLBACK ;
--测试删除表
USE DDL_DB
GO
DROP TABLE [DatabaseLog]
(Figure6:SSMS返回的提示信息)
创建服务器级别的DDL之后会出现在服务器对象-触发器的列表中,如Figure4;当执行删除数据库的Drop等DDL命令的时候,就会出现Figure5的提示信息;如果是在SSMS中删除数据库则会出现Figure6的提示信息。
(三) 很多时候在程序开发阶段是不会禁用对数据库的修改的,这些时候我们更希望是记录数据库的修改信息,方便对信息进行跟踪检查。使用 EVENTDATA 函数,可以捕获有关激发 DDL 触发器的事件的信息,此函数返回 xml 值。
前面已经创建了数据表DatabaseLog,创建下面的DDL_DatabaseLog触发器,每当数据库发生DDL事件,DDL触发器就会把相关的DDL信息插入到DatabaseLog表,信息包括操作的时间,操作人,操作的SQL等。
执行Script5测试脚本,返回Figure7的信息,查询DatabaseLog表,返回的记录有2条,一条是创建表信息,一条是删除表信息,如Figure8、Figure9所示。
D. mssql2008怎么删除数据库触发器不是字段表的
在table_1表所在的数据目录下,可编程性,数据库触发器中。
如下图所思:
E. sqlserver中寻求禁止库中生成A表的方法
没有这种方法,触发器也只支持delete,insert,update
你为什么会有这种需求?换个别的方法吧,比如a表存在时,Drop Table a
F. sqlserver2005 中得触发器怎么获取到jsp中得值
你要在 SQL Server 2005 里面, 获得 一个 JSP 页面的 IP 地址,恐怕有难度。
原因很简单,这个 触发器,是当你执行
DELETE FROM 表 WHERE 条件
的时候, 触发的。
你可能在 SqlCmd 里面执行这个语句,
也可能是 IIS 里面, 某个 ASPX 页面执行这个语句。
也可能是 Tomcat 或者 WebLogic 里面, 某个 JSP 页面,执行这个语句。
你要记录 那个访问 JSP 页面的 客户端的 IP地址, 只能在你 JSP 页面那里获取客户端 IP地址, 然后传递给 Web 服务器(这个步骤,应该是通过 request 那里获取,不用在页面那里写什么隐藏值的)
然后 Web 服务器在 访问 SQL Server 的时候, 写入 那个远程客户端的 IP地址信息(这个就没办法了,只能在 执行 DELETE 的时候(之前或之后,就看你的需求了), 再 INSERT 一条日志记录,包含那个 远程用户的 IP地址)。
G. SqlServer2005 怎样建触发器 防止数据表被删除
我这里有一个 创建表的触发器, 你参考着修改修改成 删除表的吧
1>
2>ONDATABASE
3>FORCREATE_TABLE
4>AS
5>BEGIN
6>DECLARE@EventDataASxml;
7>
8>DECLARE@EventTypeASvarchar(100);
9>DECLARE@PostTimeASvarchar(100);
10>DECLARE@ServerNameASvarchar(100);
11>DECLARE@LoginNameASvarchar(100);
12>DECLARE@DatabaseNameASvarchar(100);
13>DECLARE@CommandTextASvarchar(100);
14>
15>SET@EventData=EVENTDATA();
16>
17>SELECT
18>@EventType=t.c.value('(EventType)[1]','varchar(100)'),
19>@PostTime=t.c.value('(PostTime)[1]','varchar(100)'),
20>@ServerName=t.c.value('(ServerName)[1]','varchar(100)'),
21>@LoginName=t.c.value('(LoginName)[1]','varchar(100)'),
22>@DatabaseName=t.c.value('(DatabaseName)[1]','varchar(100)'),
23>@CommandText=t.c.value('(TSQLCommand/CommandText)[1]','varchar(100
)')
24>FROM
25>@EventData.nodes('/EVENT_INSTANCE')t(c);
26>
27>PRINT('CREATE_TABLE');
28>PRINT(@EventType);
29>PRINT(@PostTime);
30>PRINT(@ServerName);
31>PRINT(@LoginName);
32>PRINT(@DatabaseName);
33>PRINT(@CommandText);
34>END
35>go
1>createtableyyy(aINT);
2>go
CREATE_TABLE
CREATE_TABLE
2010-10-01T21:32:24.843
HOME-BED592453CSQLEXPRESS
HOME-BED592453Cwzq
Stock
createtableyyy(aINT);
H. SQLAlchemy有修改表结构的方法/工具吗
SQLAlchemy有修改表结构的方法/工具
[[mockDelegate expect] retriever:retriever didFindEventData:@{@"some valid JSON": @"some value"}];
successBlock(nil, responseObject);
[mockDelegate verify];
return YES;
}]
failure:OCMOCK_ANY];
// Method to test
[retriever retrieveEventWithUserId:@"testUserId" eventId:@"testEventId"];
[mockHTTPClient verify];
}
@end
最后要评论的一点是 AFNetworking 2.0 版本发布所以考虑使用它,是否它涵盖您的要求。
I. SQL 2008 能不能增多禁止访问的IP
通过新增的触发器来实现控制。
执行下面的T-SQL后,将使除IP地址为192.168.1.1之外的客户端连接失败。
USE master
GO
CREATE TRIGGER tr_LoginCheck
ON ALL SERVER
FOR LOGON
AS
IF EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]', 'varchar(15)') <> '192.168.1.1'
ROLLBACK TRAN
GO
J. sqlserver2005帮忙写一个触发器,急用
ip地址的没做过,但是做过记录主机名的,你看看行不行?
CREATE
TRIGGER
tr_ALTER_TABLE
ON
DATABASE
FOR
ALTER_TABLE
AS
begin
DECLARE
@Data
XML
SET
@Data
=
EventData()
INSERT
EvtLog
(PostTime,
LoginName,HostName
EventType,
TSQLCommand)
VALUES
(GETDATE(),
CONVERT(NVARCHAR(100),
system_user),
CONVERT(NVARCHAR(100),
host_name()),
@Data.value('(/EVENT_INSTANCE/EventType)[1]',
'nvarchar(100)'),
@Data.value('(/EVENT_INSTANCE/TSQLCommand)[1]',
'nvarchar(2000)')
)
end