2016-07-31 3 views
0

ALTER VIEWステートメントを実行して、ビューに格納されている列の日付書式を変更しようとしていますが、機能していません。SQL Server:ビューまたは関数に、自己参照が含まれています。ビューまたは関数が直接的または間接的に自身を参照することはできません

マイクエリ:

ALTER VIEW v_cust_invoices 
AS 
    SELECT 
     FORMAT(INV_DATE,'MM-dd-yy') as INV_DATE 
    FROM 
     v_cust_invoices 

私は常にエラー

ビューまたは関数 'v_cust_invoicesは' 自己参照が含まれています。私は(それが現在yy-mm-ddです)INV_DATEmm-dd-yyへの日付形式を変更しようとして直接または間接的に

ビューまたは関数は、自分自身を参照することはできません。誰か助けてくれますか?私が間違っていることを確信していない。

編集:私は代わりに

ALTER VIEW v_cust_invoices 
AS 
    SELECT FORMAT(INV_DATE,'MM-dd-yy') as INV_DATE 
    FROM INVOICE 

をすれば、それはINV_DATEを除くすべての列を削除します。

ビューの定義:それは自分自身を参照しないように

SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE VIEW [dbo].[v_cust_invoices] AS 
    SELECT 
     CUSTOMER.CUST_NUM, CUST_LNAME, 
     CUST_BALANCE, INV_NUM, INV_DATE, INV_AMOUNT 
    FROM 
     CUSTOMER, INVOICE 
GO 
+0

ドロップしてビューを再作成します。 SQL Enterprise Managerで開くか、Alterとしてスクリプトを作成し、定義内の型を変更してから実行します。元のビューはそれ自身を参照するものではなく、他のビューまたはテーブルを参照する必要があります –

+0

私は理解できません。すべての種類が良いです、私はちょうどクエリに間違っています。 – inaprniac

+0

ビューは、* tables *からデータを操作して生成しますが、このビューはデータを取得する場所ですか?ビュー定義内のテーブルへの参照はありません。 LookはFROM句でビューの現在の*定義を見た。 *テーブル*または他の*ビューへの参照が表示されます。 –

答えて

2

あなたは、クエリを変更する必要があります。
v_cust_invoicesビューの現在の定義を、そのFROM節で見てください。テーブルへの参照やその他のビューが表示されます。クエリの最後の行を下の行に置き換えます。テーブル(または他のビュー)の名前を置き換えると、このビューはデータを取得します。

ALTER VIEW v_cust_invoices 
AS 
SELECT FORMAT(INV_DATE,'MM-dd-yy') as INV_DATE, 
    [Plus all the rest of the output columns 
    from CURRENT definition of v_cust_invoices] 
FROM [here Put the table or other view that is in current view definition] 

か、今そのopは掲載している完全なビューの定義:

ALTER VIEW [dbo].[v_cust_invoices] AS 
    SELECT FORMAT(INV_DATE,'MM-dd-yy') INV_DATE, 
     CUSTOMER.CUST_NUM, CUST_LNAME, 
     CUST_BALANCE, INV_NUM, INV_DTE, INV_AMOUNT 
    FROM CUSTOMER, INVOICE 
GO 
+0

編集を参照して、私はこれを試しました。 – inaprniac

+0

これは問題ありませんでした。ありがとう! – inaprniac

関連する問題