抱歉蹩脚的标题..
我有一个存储过程(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
答案 0 :(得分:1)
您的程序还有很多(不了解p_GetCompleteIncompleteNaOverviewSCORE
),但我猜测表名和列以及您问题中显示的其他一些信息。至少你会知道怎么做这个,
请检查您是否有一个名为audit.dbo
或dbo.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电话的例子。
MULTI LINE TVF - 可能比在线TVF慢。取决于你的逻辑。