0

作成中の内で使用するTVFとを作成しました。ビューには関数を表示または使用する機能がないようで、エラーが許可に基づいているのか、それとも ?内からを呼び出すことが完全に不可能なのかわかりません。ScalarSQL Server 2008ViewTVFView

SSMSで発生するエラーはInvalid Object Name dbo.TwoYearColumnsWithNulls'

ここにTVF私が作成したものがあります:

Create FUNCTION [dbo].[TwoYearColumnsWithNulls]()
RETURNS @table TABLE( cols nvarchar(max))
AS
BEGIN
    DECLARE @cols AS NVARCHAR(MAX), @startdate as varchar(max),@enddate as varchar(max);
    Set @startdate = cast((DATEPART(yyyy, GetDate())-1) as varchar(4))+'-01-01';
    Set @enddate = cast((DATEPART(yyyy, GetDate())) as varchar(4))+'-12-24';    

    WITH DateRange(dt) AS
            (
                SELECT CONVERT(datetime, @startdate) dt
                UNION ALL
                SELECT DATEADD(ww,1,dt) dt FROM DateRange WHERE dt < CONVERT(datetime, @enddate)
            )
    INSERT INTO @table (cols) SELECT STUFF((SELECT ',' + 'isnull('+QUOTENAME((cast(DATEPART(yyyy, dt) as varchar(4)))+'-Week'+(cast(DATEPART(ww, dt) as varchar(2))))+', 0)' FROM DateRange
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')
        OPTION (maxrecursion 0);

    RETURN
END
GO

Viewこれを使用しようとしている Imの小さなスニペットを次に示しPIVOTます。

CREATE VIEW [testdta].[TwoYearInventoryIssues]
AS
SELECT LIITM as ShortItemNumber, IMLITM as LongItemNumber, (SELECT cols FROM dbo.TwoYearColumnsWithNulls())
FROM
    (
        SELECT LIITM, IMLITM,.......
<SNIP>

編集

以下のコメントに従って、Scalar関数と aTVFを使用して同じ結果を達成しようとしました。どちらも機能せず、同じエラーが発生しました。それが役立つ場合、ここScalarに私が試した機能があります:

Create FUNCTION dbo.TwoYearColumnsWithNullsScalar()
RETURNS nvarchar(max)
AS
BEGIN
    DECLARE @isnullcols AS NVARCHAR(MAX), @startdate as varchar(max),@enddate as varchar(max);
    Set @startdate = cast((DATEPART(yyyy, GetDate())-1) as varchar(4))+'-01-01';
    Set @enddate = cast((DATEPART(yyyy, GetDate())) as varchar(4))+'-12-24';    

    WITH DateRange(dt) AS
            (
                SELECT CONVERT(datetime, @startdate) dt
                UNION ALL
                SELECT DATEADD(ww,1,dt) dt FROM DateRange WHERE dt < CONVERT(datetime, @enddate)
            )
    SELECT @isnullcols = STUFF((SELECT ',' + 'isnull('+QUOTENAME((cast(DATEPART(yyyy, dt) as varchar(4)))+'-Week'+(cast(DATEPART(ww, dt) as varchar(2))))+', 0)' FROM DateRange
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')
        OPTION (maxrecursion 0);

    RETURN  @isnullcols
END
4

0 に答える 0