sql server 2005 触发器 执行sp_executesql 的问题
db1,db2是一个服务器 server 的2个数据库db1的table1 建立一个after update触发器 ,当 update table1 后建立一个复制表到 db2的table2中exec server.db2.dbo.sp_executesql N'select * into table2 from server.db1.dbo.table1'当用server.db1.dbo.table1 时 无法正常运行报事务上下文正在使用
当用 db1.dbo.table1 时 可以正常运行如果前边必须 加server 如何解决 这是什么原因造成的呢
db1,db2是一个服务器 server 的2个数据库db1的table1 建立一个after update触发器 ,当 update table1 后建立一个复制表到 db2的table2中exec server.db2.dbo.sp_executesql N'select * into table2 from server.db1.dbo.table1'当用server.db1.dbo.table1 时 无法正常运行报事务上下文正在使用
当用 db1.dbo.table1 时 可以正常运行如果前边必须 加server 如何解决 这是什么原因造成的呢
--创建链接服务器
exec sp_addlinkedserver 'ITSV', ' ', 'SQLOLEDB', '远程服务器名或ip地址 '
exec sp_addlinkedsrvlogin 'ITSV', 'false ',null, '用户名 ', '密码 ' --查询示例
select * from ITSV.数据库名.dbo.表名 --导入示例
select * into 表 from ITSV.数据库名.dbo.表名
use master
select srvid,srvname,datasource from sysservers
如果没有srvid=0或者srvid=0(也就是本机器)但srvname和datasource不一样, 需要按如下方法修改:
USE master
GO
-- 设置两个变量
DECLARE @serverproperty_servername varchar(100),
@servername varchar(100)
-- 取得Windows NT 服务器和与指定的 SQL Server 实例关联的实例信息
SELECT @serverproperty_servername = CONVERT(varchar(100), SERVERPROPERTY('ServerName'))
-- 返回运行 Microsoft SQL Server 的本地服务器名称
SELECT @servername = CONVERT(varchar(100), @@SERVERNAME)
-- 显示获取的这两个参数
select @serverproperty_servername,@servername
--如果@serverproperty_servername和@servername不同(因为你改过计算机名字),再运行下面的
--删除错误的服务器名
EXEC sp_dropserver @server=@servername
--添加正确的服务器名
EXEC sp_addserver @server=@serverproperty_servername, @local='local'
修改这项参数,需要重新启动MSSQLserver和Sqlserveragent服务才能生效。
我的执行结果
srvid, srvname, datasource
1 SQL2005\GDERPSQLSERVER SQL2005\GDERPSQLSERVER
srvid, srvname, datasource
1 SQL2005\GDERPSQLSERVER SQL2005\GDERPSQLSERVER这样的话,使用server肯定不行。。
两个方案:
1.使用127.0.0.1,应该不会出错的。
2.如果1不能满足你的需求,你就按我上边给你的方法改改看,不过我是在2000上使用的,2005没有验证过。
select CONVERT(varchar(100), @@SERVERNAME服务器 怎么是 null
我本机 是 有数据的...?