0

在此查询中:

DECLARE @TempPerformance TABLE(FeatureTitle VARCHAR(50), FeatureText VARCHAR(50))

INSERT INTO @TempPerformance 
EXEC [usp_GetPerfomance] @Value

它有时给出 2 列,有时只给出一列..当它只返回 1 列时它不起作用,因为临时表不是这样设计的..

我如何区分这两个结果。

编辑

如果 SP 失败..它返回一列 - 一行:

Standard
--------
No Records Found
4

2 回答 2

1

有一种方法。使用OPENROWSET您可以将存储过程的结果放入动态创建的(临时)表中。在这个问题中有更多关于它的信息可能存在安全问题和登录问题。

之后,您可以使用轻松检查临时表中的列数sys.columns

SELECT * INTO #MyTempTable FROM OPENROWSET('SQLNCLI', 'Server=(local);Trusted_Connection=yes;',
        '[usp_GetPerfomance] ' + CAST(@Value AS VARCHAR(MAX)));

SELECT COUNT(*) FROM tempdb.sys.columns WHERE object_id=object_id('tempdb..#MyTempTable');
于 2013-10-23T11:09:06.397 回答
0

您可以使用OPENROWSET执行查询并将结果作为表获取。然后您可以使用该表来验证您是否应该以一种方式或另一种方式处理它。

如果您转到链接并查看以下部分:

SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=Seattle1;Trusted_Connection=yes;',
     'SELECT GroupName, Name, DepartmentID
      FROM AdventureWorks.HumanResources.Department
      ORDER BY GroupName, Name') AS a;

然后您可以将 SELECT 替换为 EXEC yourDatabase.Schema.Procedure。

但是,它需要您将服务器重新配置为 Ad Hoc Queries,并且您可能没有适当的权限来执行此操作。对于生产环境,它通常不是一个可靠的解决方案,所以我个人不推荐这种方法。

于 2013-10-23T10:58:54.217 回答