帮我从链式存储过程中选择

时间:2010-10-22 07:36:58

标签: sql sql-server stored-procedures dynamic-sql linked-server

我在SQL Server 2008 R2中添加了本地服务器pblack作为链接服务器

---1)
EXEC master.dbo.sp_addlinkedserver @server = N'pblack', 
                         --'pblack' is my localhost
    @srvproduct=N'SQL Server'

并成功执行2)和3):

--2)
sp_MSforeachtable @command1="EXEC sp_spaceused '?'"

--3)
SELECT * INTO #temp
FROM OPENQUERY(pblack,'exec sp_who') 
SELECT * FROM #temp

4)
如何将2)插入3)而不是'exec sp_who'。我无法正确引用表达式......

为什么我无法在SQL Server 2008R2中链接本地或本地主机?

更新
目的是进一步修改SELECT,例如,输出max(data) - 查找具有最大大小的表

更新2:

SELECT * INTO #temp 
FROM OPENQUERY
( 
     pblack, 
     'EXEC sp_MSforeachtable @command1= '' EXEC sp_spaceused ''''?'''' '' '
)

给出错误:

Msg 208, Level 16, State 1, Procedure sp_MSforeach_worker, Line 102
Invalid object name '#qtemp'.

我尝试使用temp varchar变量来结束字符串+收到相同的错误。

我怀疑问题更深,因为“select”似乎不是来自一个行集而是多个行集?

好吧,我可以淹没在研究代码但我期望找到一些(魔术)解决方法。

1 个答案:

答案 0 :(得分:1)

只需将每个嵌套级别的引号加倍,并且也始终使用单引号。

想想就是这样:

SELECT * INTO #temp
FROM OPENQUERY(
     pblack,
     'EXEC sp_MSforeachtable @command1= '' EXEC sp_spaceused ''''?'''' '' ')