我有多个链接服务器,包含许多数据库。我正在尝试在所有服务器/数据库中搜索特定信息并返回 SQL 中的一个结果集。
我正在寻找一种不更改服务器设置/防火墙以允许从链接服务器插入的方法。
我想过在链接服务器上创建一个表,然后将它们拉入,但我不想这样做。主要是因为很多人会同时运行这个,感觉很草率。
如果有一些语法问题,我深表歉意,我删除了具体信息。
我收到此代码的错误。
(2 行受影响)链接服务器“server1”的 OLE DB 提供程序“SQLNCLI10”返回消息“事务管理器已禁用其对远程/网络事务的支持。”。消息 7391,级别 16,状态 2,第 3 行 由于链接服务器“server1”的 OLE DB 提供程序“SQLNCLI10”无法开始分布式事务,因此无法执行操作。
到目前为止,我有:
DECLARE @SERVER VARCHAR(20),@EmpNo VARCHAR(10)
SET @EmpNo = '0000000001'
CREATE TABLE #EMPNOLOCATIONTEMP ( ServerName nvarchar(50),CompanyCode nvarchar(20), EmpNo nvarchar(20), Name nvarchar(500) )
DECLARE @TEMP TABLE (servername nvarchar(50)) -- remove and find table with information
insert into @TEMP
values('server1'),('server2'),('server3')
DECLARE db_cursor CURSOR FOR
SELECT ServerName
FROM @TEMP
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @SERVER
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO #EMPNOLOCATIONTEMP
--EXECUTE [dbo].usp_Ulti_EmpNo_Search @EmpNo,@SERVER
EXECUTE('
EXECUTE(''
CREATE table #Results (CompanyCode nvarchar(20), EmpNo nvarchar(20), Name nvarchar(500))
EXECUTE sp_MSforeachdb ''''USE ?;
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''''''''[dbo].[TableWithInfo]'''''''') )
BEGIN
INSERT INTO #Results
select CompanyCode,EmpNo,Name
from TableWithInfo
where EmpNo = '''''''''+@EmpNo+'''''''''
END
''''
SELECT * FROM #Results
'') AT '+@SERVER+'
')
UPDATE #EMPNOLOCATIONTEMP SET ServerName = @SERVER WHERE ServerName is null
FETCH NEXT FROM db_cursor INTO @SERVER
END
CLOSE db_cursor
DEALLOCATE db_cursor
SELECT * FROM #EMPNOLOCATIONTEMP
DROP TABLE #EMPNOLOCATIONTEMP
先感谢您。