2012-01-27 133 views
-1

我有一个存储过程执行一些连接等。要返回一个字段在returnset中的某个值,我有另一个存储的过程,我打电话。然而,其中一个参数需要是为原始结果集中的另一个字段返回的计算值(如果有意义的话),例如,从另一个调用一个存储过程 - 语法问题

SELECT @S = (CONVERT (NVARCHAR (50), DateDiff(minute, CONVERT (CHAR (24), [PI9_StartDT], 
108), CONVERT (CHAR (24), [PI9_EndDT], 108))/60)) + ' ' + 'Hrs' + ' ' + 
SUBSTRING(CONVERT (NVARCHAR (50), (DateDiff(minute, CONVERT (CHAR (24), [PI9_StartDT], 
108), CONVERT (CHAR (24), [PI9_EndDT], 108)))), CHARINDEX('.', CONVERT (NVARCHAR (50), 
(DateDiff(minute, CONVERT (CHAR (24), [PI9_StartDT], 108), CONVERT (CHAR (24), 
[PI9_EndDT], 108))/60)), 2), 3) + ' ' + 'mins' 

exec @OUT = [MUJV].[FailPassPI9] GarrisonName, @S, SCPCategory, @S 

我需要将该计算值作为存储过程参数传递,如上所述。

但这并不奏效。我试图做的是包含@S(该总和用于返回结果集中的字段)作为参数存储到我的存储过程中。正如你所看到的,这很复杂。

我该怎么做才能做到这一点?

+0

你说:“这不起作用,但是。”但你有什么错误? – Tony 2012-01-27 00:44:17

+0

为什么不将'PI9_StartDT'&'PI9_EndDT'传递给'FailPassPI9'过程并让它形成字符串? – Tony 2012-01-27 00:45:55

+1

我没有看到第一个“设置”中的任何FROM - 它不清楚它在做什么。 – 2012-01-27 00:46:07

回答

0

看来你在变量中得到了错误的结果。这里有两个例子,你可以考虑更好的性能和可读性:

DECLARE @PI9_StartDT datetime = getdate() 
DECLARE @s varchar(max) 
SELECT @S = cast(datepart(hh, @PI9_StartDT) as varchar(2)) + ' Hrs ' + 
      cast(datepart(mi, @PI9_StartDT) as varchar(2)) + ' mins' 

SELECT @s = stuff(convert(varchar(5), getdate(), 108), 3, 1, ' hrs ') + ' mins' 

我不会试图去猜测为什么和怎样你的脚本失败,我不能根据当前的信息。

相关问题