检查存储过程是否仅返回一列和一行

时间:2013-10-23 09:55:23

标签: sql sql-server sql-server-2008

在此查询中:

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

INSERT INTO @TempPerformance 
EXEC [usp_GetPerfomance] @Value

它有时会提供2列,有时只提供一列。当它只返回1列时它不起作用,因为临时表不是这样设计的。

如何区分这两个结果。

修改

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

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

2 个答案:

答案 0 :(得分:1)

有一种方法。使用OPENROWSET,您可以将存储过程的结果导入动态创建的(临时)表中。 More about it in this question安全性和登录问题可能存在问题。

之后,您可以使用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');

答案 1 :(得分: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;

然后你可以用EXEC yourDatabase.Schema.Procedure替换SELECT。

然而,它要求您reconfigure服务器到Ad Hoc Queries,并且您可能没有适当的权限来执行此操作。 对于生产环境而言,它通常不是一个可靠的解决方案,所以我个人不会推荐这种方法。