假设有链接服务器B,服务器B上有 db 数据库DECLARE @tempTable TABLE(F_Name NVARCHAR(50))-- 查询数据放入本地表变量-- 第一句会出错
INSERT INTO @tempTable exec B.db.dbo.sp_executesql N'select distinct f_name from t'--第二句正常
INSERT INTO @tempTable exec sp_executesql N'select distinct f_name from B.db.dbo.t'SELECT * FROM @tempTable
为什么第一句会出错呢?
提示错误“没有活动的事务”
INSERT INTO @tempTable exec B.db.dbo.sp_executesql N'select distinct f_name from t'--第二句正常
INSERT INTO @tempTable exec sp_executesql N'select distinct f_name from B.db.dbo.t'SELECT * FROM @tempTable
为什么第一句会出错呢?
提示错误“没有活动的事务”
dbo.sp_executesql
不是B的,
而是你的.
exec B.db.dbo.sp_executesql N'select distinct f_name from t'就是不加 Insert Into
go
--T表在DB在這實例上?
DECLARE @tempTable TABLE(F_Name NVARCHAR(50))-- 查询数据放入本地表变量-- 第一句会出错
INSERT INTO @tempTable exec B.db.dbo.sp_executesql N'select distinct f_name from t'
是的,T 表就db的实例上
-- 第一句会出错
INSERT INTO @tempTable exec B.db.dbo.sp_executesql N'select distinct f_name from t'--改為INSERT INTO @tempTable EXECUTE ('select distinct f_name from db.dbo.t') AT B;
FROM OPENROWSET('SQLNCLI', 'Server=远程IP;Uid=sa;Pwd=pwd',
'select * from dbname.dbo.tablename where ...') AS a;
select @a
第一句调用远程服务器上的存储过程执行SQL语句
第二句调用本地服务器上的存储过程执行SQL语句查询远程服务器上的数据
http://topic.csdn.net/u/20080612/22/bb2dfa83-1cf3-4a0b-9bd4-5a39e6193556.html
insert into #t (a)
SELECT 字段 FROM OPENROWSET('SQLNCLI', 'Server=远程IP;Uid=sa;Pwd=pwd',
'select * from dbname.dbo.tablename where ...') AS a;
go
select * from #t
面且,其实我的链接服务器名是动态传入的,可以变,也可以没有DECLARE @tempTable TABLE(F_Name NVARCHAR(50))
DECLARE @exec NVARCHAR(4000)
DECLARE @SQL NVARCHAR(4000)
-- 这里当链接服务器名改变时,也会改变,如果没有就取本地表了
SET @EXEC='exec ascenter.mkcenter.dbo.sp_executesql @sql'
set @sql='SELECT DISTINCT F_DishTypeMain FROM V_BillByDishType WHERE NOT F_DishTypeMain IS NULL'
INSERT INTO @tempTable EXEC sp_executesql @exec, N'@sql NVARCHAR(4000)', @SQL
SELECT * FROM @tempTable
SQL Server是什麼版本?2000