SQL:使用存储过程时,[ID]是必需的

时间:2014-01-02 18:46:53

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

抱歉蹩脚的标题..

我有一个存储过程(p_1),它返回值:OPEN或CLOSED,

现在我要做的是编写另一个存储过程(p_2),它在列targetDate中查看我的数据库(audit.dbo),如果p_1打开并超过目标日期(audit.dbo),那么它应该返回'逾期'或'准时'

现在我的问题是我应该将Audit_ID与存储的proc(p_1)的Audit_ID匹配,以查看它是否过期。我的存储过程结果是:

  

AUD_ID:1 Q1:10 Q2:30 Q3:40总计:80状态:打开

我的数据库表(audit.dbo)数据类似于

  

AUD_ID:1 Start_date:2013/12/03 Target_date:2014/01/24

我的程序定义

ALTER PROCEDURE [dbo].[p_GetSocre] 
AS 
BEGIN 
 SET NOCOUNT ON; 

   CREATE TABLE #tmp1( AUD_ID BIGINT, RowCounter BIGINT, DistinctCounter BIGINT
                    , NACounter BIGINT, Total BIGINT, [Status] VARCHAR(MAX) ) 

  INSERT INTO #tmp1 EXEC [p_GetCompleteIncompleteNaOverviewSCORE] 

  SELECT [Status] AS [Open/Closed], COUNT(*) AS [Status] 
  FROM #tmp1 
  GROUP BY [Status] 
END 

2 个答案:

答案 0 :(得分:1)

您的程序还有很多(不了解p_GetCompleteIncompleteNaOverviewSCORE),但我猜测表名和列以及您问题中显示的其他一些信息。至少你会知道怎么做这个,

请检查您是否有一个名为audit.dbodbo.audit 的表格 - < - Warrning

尝试这样的事情......

CREATE PROCEDURE [dbo].[p_Target_Status] 
AS 
BEGIN 
 SET NOCOUNT ON; 

   IF OBJECT_ID('tempdb..#tmp1') IS NOT NULL  --<-- check for table Existance 
    DROP TABLE #tmp1                         -- if exist then drop 

   CREATE TABLE #tmp1( AUD_ID BIGINT, RowCounter BIGINT, DistinctCounter BIGINT
                    , NACounter BIGINT, Total BIGINT, [Status] VARCHAR(MAX) ) 

  INSERT INTO #tmp1 EXEC [p_GetCompleteIncompleteNaOverviewSCORE] 

 SELECT t2.AU_ID ,  CASE WHEN CAST(t2.TargetDate AS DATE) > CAST(GETDATE() AS DATE) 
                        THEN 'Over Due' 
                        ELSE 'On Time' END AS [Target Status]

 FROM #tmp1 t1 INNER JOIN dbo.Audit t2
 ON t1.AUD_ID = t2.AUD_ID
 WHERE [Status] = 'Open'
END 

答案 1 :(得分:0)

您无法直接将存储过程的结果加入表格。

要么执行以下操作之一。

1 - 将结果保存到表格中。 MY_TABLE与存储过程MY_STORED_PROC

的输出具有相同的模式

http://technet.microsoft.com/en-us/library/ms174335.aspx

INSERT INTO MY_TABLE EXEC MY_STORED_PROC

2 - 将存储过程更改为表值函数。将结果加入静态表。

交叉申请TVF电话的例子。

http://craftydba.com/?p=3767

MULTI LINE TVF - 可能比在线TVF慢。取决于你的逻辑。

http://craftydba.com/?p=3754