gpt4 book ai didi

sql-server - 使用系统存储过程的结果作为可查询表

转载 作者:行者123 更新时间:2023-12-03 10:03:30 27 4
gpt4 key购买 nike

注:最高linked question没有解决系统存储过程的问题,但已经很接近了。在评论者的帮助下,I came to a working answer .

尝试对 sp_spaceused 使用如下语句, 抛出错误

SELECT * INTO #tblOutput exec sp_spaceused 'Account'
SELECT * FROM #tblOutput

错误:

Must specify table to select from.



和:

An object or column name is missing or empty. For SELECT INTO statements, verify each column has a name. For other statements, look for empty alias names. Aliases defined as "" or [] are not allowed. Change the alias to a valid name.



当我完全声明一个表变量时,它会按预期工作,所以在我看来,存储过程确实返回了一个实际的表。
CREATE TABLE  #tblOutput (
name NVARCHAR(128) NOT NULL,
rows CHAR(11) NOT NULL,
reserved VARCHAR(18) NOT NULL,
data VARCHAR(18) NOT NULL,
index_size VARCHAR(18) NOT NULL,
unused VARCHAR(18) NOT NULL)

INSERT INTO #tblOutput exec sp_spaceused 'Response'
SELECT * FROM #tblOutput

为什么不能使用带有 EXECUTE sp_xxx 结果集的临时表或表变量?或者:是否存在比每次都必须预定义完整表更紧凑的表达式?

(顺便说一句,在撰写本文时, Googling for the exact term SELECT * INTO #tmp exec sp_spaceused 正好返回了一个结果)

最佳答案

TL;DR:使用 SET FMTONLY OFF OPENQUERY ,详情如下。

出现 that the link provided by Daniel E.只是解决方案的一部分。例如,如果您尝试:

-- no need to use sp_addlinkedserver
-- must fully specify sp_, because default db is master
SELECT * FROM OPENQUERY(
[SERVERNAME\SQL2008],
'exec somedb.dbo.sp_spaceused ''Account''')

您将收到以下错误:

The OLE DB provider "SQLNCLI10" for linked server "LOCALSERVER\SQL2008" supplied inconsistent metadata for a column. The name was changed at execution time.



我找到了解决方案 through this post , 和 then a blog-post on OPENQUERY ,这反过来告诉我,直到 SQL2008,你需要使用 SET FMTONLY OFF .最终的解决方案本质上非常简单(并且更容易实现,因为不需要指定环回链接服务器),是这样的:
SELECT * FROM OPENQUERY(
[SERVERNAME\SQL2008],
'SET FMTONLY OFF
EXEC somedb.dbo.sp_spaceused ''Account''')

另外,如果您还没有设置 DATA-ACCESS ,您可能会收到以下错误:

Server 'SERVERNAME\SQL2008' is not configured for DATA ACCESS.



这可以通过运行以下命令来修复:
EXEC sp_serveroption 'SERVERNAME\SQL2008', 'DATA ACCESS', TRUE

关于sql-server - 使用系统存储过程的结果作为可查询表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23326362/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com