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

「サブクエリが EXISTS で導入されていない場合、選択リストで指定できる式は 1 つだけです」というエラーが表示されます。複数のフィールドを返すことはできません。これを解決する方法を知る必要があります。この関数をストアド プロシージャで返し、これらすべての値のテーブルを取得する必要があります

どんな助けにも感謝します

4

3 に答える 3

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 の回答を参照してください。

于 2013-04-12T09:32:03.393 に答える