在此查询中:
DECLARE @TempPerformance TABLE(FeatureTitle VARCHAR(50), FeatureText VARCHAR(50))
INSERT INTO @TempPerformance
EXEC [usp_GetPerfomance] @Value
它有时会提供2列,有时只提供一列。当它只返回1列时它不起作用,因为临时表不是这样设计的。
如何区分这两个结果。
修改
如果SP失败..它返回一列 - 一行为:
Standard
--------
No Records Found
答案 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,并且您可能没有适当的权限来执行此操作。 对于生产环境而言,它通常不是一个可靠的解决方案,所以我个人不会推荐这种方法。