34,594
社区成员
发帖
与我相关
我的任务
分享
-- 整了一上午终于把楼主这个问题给整好了!
-- 比如说:在本地 test 数据库 与局域网 245 的 hlldb数据库中 都有一张结构如下的表 t
CREATE TABLE T(
id INT,
name VARCHAR(20)
);
-- 现在假设当 本地 test 数据库 中的 表 t中插入记录行的同时向 局域网 245 的 hlldb数据库 的表t 插入相同的记录行,
-- 实现如下(用触发器实现)
-- Step 1 :创建链接服务器、及其登录授权(在本地 test数据库执行)
--创建链接服务器
-- 示例代码:
-- exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址 '
-- exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密码 '
-- 实际操作代码:
exec sp_addlinkedserver 'it245 ', ' ', 'SQLOLEDB ', '192.168.1.245'
exec sp_addlinkedsrvlogin 'it245 ', 'false ',null, 'sa', 'go2wan@szty'
-- Step 2 :创建触发器(在本地 test数据库执行)
CREATE TRIGGER tr_in_t on [dbo].[t]
FOR INSERT
AS
BEGIN
SET NOCOUNT ON
SET XACT_ABORT ON
DECLARE @id INT, @name VARCHAR(20);
SELECT @id=id, @name=name FROM inserted;
INSERT INTO it245.hlldb.dbo.t(id,name) VALUES(@id,@name);
END
INSERT INTO t(id,name) values(1,'luoyoumou1');
-- 如果出现这样的错误:(请参考以下五个网址的文档)
链接服务器"it245"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "该伙伴事务管理器已经禁止了它对远程/网络事务的支持。"。
-- http://hi.baidu.com/wgx331/blog/item/ef81be45deaadc27cffca32e.html
-- http://blog.pfan.cn/jixian/34117.html
-- http://dyuan.blog.sohu.com/16734773.html
-- http://sai5d.blog.163.com/blog/static/62225483200901322939411/
-- http://topic.csdn.net/t/20060523/11/4771841.html
INSERT INTO t(id,name) values(1,'luoyoumou1');
SELECT * FROM t;
SELECT * FROM it245.hlldb.dbo.t;
USE master;
GO
CREATE LOGIN login_test WITH PASSWORD = '3KHJ6dhx(0xVYsdf' MUST_CHANGE,
CHECK_EXPIRATION = ON;
GO
GRANT VIEW SERVER STATE TO login_test;
GO
CREATE TRIGGER connection_limit_trigger
ON ALL SERVER WITH EXECUTE AS 'login_test'
FOR LOGON
AS
BEGIN
IF ORIGINAL_LOGIN()= 'login_test' AND
(SELECT COUNT(*) FROM sys.dm_exec_sessions
WHERE is_user_process = 1 AND
original_login_name = 'login_test') > 3
ROLLBACK;
END;