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