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