gpt4 book ai didi

tsql - 如何在动态 SQL 中处理从 OpenQuery 调用到链接分析服务器的空结果集?

转载 作者:行者123 更新时间:2023-12-04 00:48:47 24 4
gpt4 key购买 nike

我有许多结构类似于此的存储过程:

DECLARE @sql NVARCHAR(MAX)
DECLARE @mdx NVARCHAR(MAX)

CREATE table #result
(
[col1] NVARCHAR(50),
[col2] INT,
[col3] INT
)

SET @mdx = '{some dynamic MDX}'
SET @sql = 'SELECT a.* FROM OpenQuery(LinkedAnalysisServer, ''' + @mdx + ''') AS a'

INSERT INTO #result
EXEC sp_executesql @sql
SELECT * FROM #result

当结果存在于多维数据集中时,这非常有效。但是,当 OpenQuery 结果为空时,INSERT 失败并出现以下错误:

Column name or number of supplied values does not match table definition.

我的问题是,处理这种情况的最佳方法是什么?我在静态报告文件 (.rdlc) 中使用结果,因此(我很确定)需要临时表的显式键入。

最佳答案

在您的存储过程中使用 TRY/CATCH,您会注意到您的问题有一个特定的错误编号,因此请检查错误编号,如果是,则返回一个空结果集。因为您已经定义了表格,所以会更容易。

伪代码看起来像这样:

SET @mdx = '{some dynamic MDX}'
SET @sql = 'SELECT a.* FROM OpenQuery(LinkedAnalysisServer, ''' + @mdx + ''') AS a'

BEGIN TRY

INSERT INTO #result
EXEC sp_executesql @sql

END TRY
BEGIN CATCH

IF ERROR_NUMBER <> 'The error number you are seeing'
BEGIN
RAISERROR('Something happened that was not an empty result set')
END

END CATCH

SELECT * FROM #result

您需要检查该特定错误,这样您就不会在 SSAS 服务器崩溃等情况下返回空结果集。

关于tsql - 如何在动态 SQL 中处理从 OpenQuery 调用到链接分析服务器的空结果集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2969734/

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