由链接数据库做的本地视图无法创建触发器?
EXEC master.dbo.sp_addlinkedserver
@server = N'MYSQLOS', @srvproduct=N'127.0.0.1', @provider=N'MSDASQL', @provstr=N'Driver={MySQL ODBC 5.1 Driver};Server=127.0.0.1;Database=db;User=user;Password=***;Option=3;'
CREATE VIEW [dbo].[View_Order]
AS
SELECT * FROM OPENQUERY(MYSQL, 'select * from order') AS derivedtbl_1
在本地SQL Server 2008 R2中通过上面的代码创建链接数据库和视图,用SQL查询或者视图都能正常访问,当在视图上创建触发器的时候就提示“消息 8197,级别 16,状态 6,过程 Remote_Num,第 1 行
对象 'View_Order' 不存在,或对此操作无效。” 代码入下
CREATE TRIGGER Remote_Num
ON View_Order
AFTER UPDATE
AS
IF UPDATE(isvalid)
BEGIN
declare @o_isvalid nvarchar(1) --修改之前的
declare @n_isvalid nvarchar(1) --修改之后的
declare @o_id bigint
END
GO
请问这个是代码有问题还是是链接数据库不能做触发器呢?因为触发的动作是由远程的MySQL服务器做的,还有其他方案可以实现当MySQL服务器里数据库数据变化了,这边MSSQL数据库就做一些动作呢
------解决方案--------------------官方文档: 视图只能被 INSTEAD OF 触发器引用。
参考 http://technet.microsoft.com/zh-cn/library/ms189799(v=sql.105).aspx
try this,
CREATE TRIGGER Remote_Num
ON View_Order
INSTEAD OF UPDATE
AS
IF UPDATE(isvalid)
BEGIN
declare @o_isvalid nvarchar(1) --修改之前的
declare @n_isvalid nvarchar(1) --修改之后的
declare @o_id bigint
END
GO
------解决方案--------------------请问LZ是直接更新视图吗,如 update View_Order set ... ??
或者可能是逻辑问题,把变量@n_isvalid,@o_isvalid打印出来看看.