2013-04-12 93 views
1
CREATE FUNCTION dbo.ta_OTMultiplierstest (@id int) 
RETURNS nvarchar (100) 
AS 
BEGIN 
DECLARE @text nvarchar(100) 
set @text = (SELECT CONVERT(nvarchar(5), b.Duration), CONVERT(nvarchar(5),b.Mon),  CONVERT(nvarchar(5), b.Tue), CONVERT(nvarchar(5), b.Wed), 
      CONVERT(nvarchar(5), b.Thu), CONVERT(nvarchar(5), b.Fri), CONVERT(nvarchar(5), b.Sat), CONVERT(nvarchar(5), b.Sun), 
      CONVERT(nvarchar(5), b.DayOff), CONVERT(nvarchar(5), b.Holiday), CONVERT(nvarchar(5), b.Yearly), 
      CONVERT(nvarchar(5), b.Maternity), CONVERT(nvarchar(5), b.Other) 

      FROM ta_GenPolOTMultiplier b WHERE b.PolHistID = @id 
      Group By b.Duration)--, b.Mon, b.Tue, b.Wed, b.Thu, b.Fri, b.Sat, b.Sun, b.DayOff, b.Holiday, b.Yearly, b.Maternity, b.Other) 

return @text 
END 

我得到這個錯誤「只有一個表達式可以在當子查詢未與引入的選擇列表中指定是否存在」 我知道,我不能返回更多我只需要知道我能如何解決這個問題? 我需要在存儲過程返回此功能並獲得所有這些值的表從一個用戶定義的函數返回一個表

我感謝所有幫助

回答

0

試試這個一個 -

CREATE FUNCTION dbo.ta_OTMultiplierstest (@id int) 
RETURNS @Result TABLE 
(
    Duration nvarchar(5), 
    Mon nvarchar(5), 
    Tue nvarchar(5), 
    Wed nvarchar(5), 
    Thu nvarchar(5), 
    Fri nvarchar(5), 
    Sat nvarchar(5), 
    Sun nvarchar(5), 
    DayOff nvarchar(5), 
    Holiday nvarchar(5), 
    Yearly nvarchar(5), 
    Maternity nvarchar(5), 
    Other nvarchar(5) 
) 
AS 
BEGIN 

    INSERT INTO @Result 
    (
     Duration, 
     Mon, 
     Tue, 
     Wed, 
     Thu, 
     Fri, 
     Sat, 
     Sun, 
     DayOff, 
     Holiday, 
     Yearly, 
     Maternity, 
     Other 
    ) 
    SELECT 
     CONVERT(nvarchar(5), b.Duration) 
     , CONVERT(nvarchar(5),b.Mon) 
     , CONVERT(nvarchar(5), b.Tue) 
     , CONVERT(nvarchar(5), b.Wed) 
     , CONVERT(nvarchar(5), b.Thu) 
     , CONVERT(nvarchar(5), b.Fri) 
     , CONVERT(nvarchar(5), b.Sat) 
     , CONVERT(nvarchar(5), b.Sun) 
     , CONVERT(nvarchar(5), b.DayOff) 
     , CONVERT(nvarchar(5), b.Holiday) 
     , CONVERT(nvarchar(5), b.Yearly) 
     , CONVERT(nvarchar(5), b.Maternity) 
     , CONVERT(nvarchar(5), b.Other) 
    FROM dbo.ta_GenPolOTMultiplier b WHERE b.PolHistID = @id 
    Group By b.Duration 

    RETURN 

END 
1

您需要連接的文本部分,像這樣:

set @text = (SELECT CONVERT(nvarchar(5), b.Duration) + CONVERT(nvarchar(5),b.Mon) ... 
1

你可以用一個「單獨的語句表值函數」做到這一點,如下所示:

CREATE FUNCTION dbo.ta_OTMultiplierstest (@id int) 
RETURNS TABLE 
AS 
RETURN 
    SELECT 
     CONVERT(nvarchar(5), b.Duration) 
     , CONVERT(nvarchar(5),b.Mon) 
     , CONVERT(nvarchar(5), b.Tue) 
     , CONVERT(nvarchar(5), b.Wed) 
     , CONVERT(nvarchar(5), b.Thu) 
     , CONVERT(nvarchar(5), b.Fri) 
     , CONVERT(nvarchar(5), b.Sat) 
     , CONVERT(nvarchar(5), b.Sun) 
     , CONVERT(nvarchar(5), b.DayOff) 
     , CONVERT(nvarchar(5), b.Holiday) 
     , CONVERT(nvarchar(5), b.Yearly) 
     , CONVERT(nvarchar(5), b.Maternity) 
     , CONVERT(nvarchar(5), b.Other) 
    FROM dbo.ta_GenPolOTMultiplier b WHERE b.PolHistID = @id 
    Group By b.Duration 

這將爲您提供一個表格,您可以在您的程序中使用或加入。

如果您需要單個連接的字符串,請參閱Ackroydd的答案。