我有很多的结构类似于此存储过程:如何在动态SQL中处理从OpenQuery调用链接分析服务器的空结果集?
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)中使用结果,因此需要显式输入临时表(我很确定)。
只是为了完整起见,我会注意,括号是必需的ERROR_NUMBER(),而在这种情况下,返回的数字是213 我的临时解决方法是删除动态MDX查询中我的ROWS和COLUMNS坐标轴上的NON EMPTY(),但这并不理想,因为它返回的空/稀疏表格很难看。 这很好用,谢谢。 – 2010-06-18 00:32:52
啊,是的,谢谢澄清 - 我是从内存写在家里:) – Meff 2010-06-18 07:51:40
@MrPalomar,我也使用了“Catch/ReThrow”技术在这里解释:http://stackoverflow.com/questions/1673892/is-there -sql-to-cs-throw-to-re-throw-exceptions为了使上层的异常“冒泡起来”你有密码,或者查询有错误,等等。 – Meff 2010-06-18 07:54:33