2017-11-07 188 views
0

テーブルからMS SQLサーバーでビューを作成しようとしています。テーブル名はAccount_Planです。私はAccount_Plan_vwとしてビューを作成しようとしています。 DDLを実行してビューを作成すると、以下のようなエラーが表示されます。MS SQL Serverはntextのメソッドを呼び出せません

メッセージ258、レベル15、状態1、プロシージャAccount_Plan_vw、ライン56
は、ntext型

メッセージ207、レベル16、状態1、プロシージャAccount_Plan_vw、ライン22
無効な列名のメソッドを呼び出すことはできません'どのようにすればよいのか?

エラーメッセージは、「How_the_CU_will_achieve_these_objective2__c」列が無効であることを示しています。ただし、これはntext型のAccount_Planテーブルの有効な列です。

誰かが助けることができますか?私は、ビューの作成ステートメントから追加の列を削除しました。

CREATE VIEW [dbo].[Account_Plan_vw] 
AS 
SELECT 
Results_1.Account__c 
,Results_1.How_the_CU_will_achieve_these_objectives__c 
,Results_1.How_the_CU_will_achieve_these_objective2__c 
FROM 
(
    SELECT ROW_NUMBER() OVER (PARTITION BY apc1.Account__c ORDER BY apc1.Year__c DESC, apc1.CreatedDate DESC) AS RN_1 
    ,apc1.Account__c 
,apc1.How_the_CU_will_achieve_these_objectives__c 
,apc1.How_the_CU_will_achieve_these_objective2__c 
    FROM Account_Plan apc1 
    INNER JOIN RecordType rtp1 
    ON apc1.RecordTypeId=rtp1.[Id] 
    AND rtp1.DeveloperName = 'Account_Plan' 
    INNER JOIN Account acc1 
    ON acc1.[Id] = apc1.Account__c 
    WHERE apc1.Year__c <= YEAR(GETDATE()) 
) AS Results_1 
    WHERE RN_1 = 1 
+0

コードを確認できますか? – Sami

+0

ここにコードを追加することができません。コメントが長いと言うエラーメッセージが表示されます。 –

+0

あなたの質問を[編集](https://stackoverflow.com/posts/47168524/edit)し、そこでコードを追加してください。 – Sami

答えて

1

NTEXTはNVARCHAR(MAX)の代わりに

見るためにそれを変換し、廃止されました:ntext, text, and image (Transact-SQL)

は、あなただけのビューでキャストしていないテーブルを変更することを検討すべきである、しかし:

CREATE VIEW [dbo].[Account_Plan_vw] 
AS 
SELECT 
     results_1.Account__c 
    , results_1.How_the_CU_will_achieve_these_objectives__c 
    , results_1.How_the_CU_will_achieve_these_objective2__c 
FROM (
     SELECT 
      ROW_NUMBER() OVER (PARTITION BY apc1.Account__c ORDER BY apc1.Year__c DESC, apc1.CreatedDate DESC) AS rn_1 
      , apc1.Account__c 
      , apc1.How_the_CU_will_achieve_these_objectives__c 
      , cast(apc1.How_the_CU_will_achieve_these_objective2__c as nvarchar(max)) as How_the_CU_will_achieve_these_objective2__c 
     FROM Account_Plan apc1 
     INNER JOIN RecordType rtp1 ON apc1.RecordTypeId = rtp1.[Id] 
      AND rtp1.DeveloperName = 'Account_Plan' 
     INNER JOIN Account acc1 ON acc1.[Id] = apc1.Account__c 
     WHERE apc1.Year__c <= YEAR(GETDATE()) 
) AS results_1 
WHERE RN_1 = 1 
+0

これが最初の質問にどのように答えているかわかりません。インターネットでこの質問を検索すると、 'VARCHAR'に関する同様の質問の例が見つかります。問題はあいまいな構文エラーのようです。 – Alex

+0

@Alexしかし、そのような質問に対する解決策は、サポートされているデータ型にキャスト/変換することです。(n)textの代わりにvarchar - 廃止予定の種類に関するMSの警告を参照してください。 **新しい開発作業でこれらのデータ型を使用しないようにし、現在使用しているアプリケーションを変更する予定です。代わりに、nvarchar(max)、varchar(max)、およびvarbinary(max)を使用してください。** –

+0

「NTEXT」はまだサポートされているデータ型ですので、それ自身では問題にはなりません。 'NTEXT'から' VARCHAR(MAX) 'へのキャスティングが問題を解決している参考にしたい例を見たいと思います。私は 'NTEXT'から' XML'への変換を除いて、何も発見していません。 – Alex

1

問題とそれはややわかりにくいものでした。 salesforceオブジェクトには、誰にも権限が与えられていないlast_peer_review_date__cというフィールドがありました。その結果、DBAMPユーザーはフィールドを見ることができませんでした。したがって、SF_Replicateコマンドを使用したときにSQL Serverでこのフィールドを作成することができませんでした。ビューの作成SQLは数週間前に私によって作成され、その時に動作しました。今、同じSQLを使用すると、SQLにlast_peer_review_dateフィールドがあるために失敗しましたが、Account_Planテーブルでは失敗しました。

バラージーポウリュリ

関連する問題