Sql server MS SQL Server无法在ntext上调用方法

Sql server MS SQL Server无法在ntext上调用方法,sql-server,view,ntext,Sql Server,View,Ntext,我正在尝试从表在MS SQL server中创建视图。表名是Account\u Plan,我正在尝试创建一个视图Account\u Plan\u vw。在执行DDL创建视图时,我得到如下所示的错误 Msg 258,15级,状态1,程序账户\计划\大众,第56行 无法在ntext上调用方法 Msg 207,16级,状态1,程序账户\计划\大众,第22行 列名“CU将如何实现这些目标2”无效 错误消息显示列“CU将如何实现这些目标2”无效。但是,这是ntext类型的帐户计划表中的有效列 有人能帮忙吗

我正在尝试从表在MS SQL server中创建视图。表名是Account\u Plan,我正在尝试创建一个视图Account\u Plan\u vw。在执行DDL创建视图时,我得到如下所示的错误

Msg 258,15级,状态1,程序账户\计划\大众,第56行 无法在ntext上调用方法

Msg 207,16级,状态1,程序账户\计划\大众,第22行 列名“CU将如何实现这些目标2”无效

错误消息显示列“CU将如何实现这些目标2”无效。但是,这是ntext类型的帐户计划表中的有效列

有人能帮忙吗?我刚刚从CREATEVIEW语句中删除了额外的列

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

NTEXT已弃用,请将其转换为NVARCHARMAX

见:

你应该考虑改变表格,而不仅仅是在视图中,但是:

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

这是一个有点神秘的问题。salesforce对象有一个字段作为last_peer_review_date___c,没有向任何人授予任何权限。因此,DBAMP用户无法看到该字段,因此在我使用SF_Replicate命令时,未能在SQL server中创建该字段。CREATEVIEWSQL是我几周前创建的,当时它确实可以工作。现在,当我使用相同的SQL时,它失败了,因为SQL有last_peer_review_date字段,但Account_Plan表没有


Balaji Pooruli

我们可以看看您的代码吗?我无法在这里添加代码。我收到一条错误消息,说评论很长。您的问题并在那里添加代码。我现在就这么做了。如果您使用发布的代码创建视图(即没有额外的列),会发生什么情况?我看不出这如何回答最初的问题。如果你在互联网上搜索这个问题,你会发现关于VARCHAR的类似问题的例子。问题似乎是一个模糊的语法错误。谢谢大家的回复。不幸的是,我没有修改表Account_计划的自由,因为它是使用DBAMP connector使用SF_Replicate命令从Salesforce CRM复制的。Salesforce对象帐户计划中的长文本区域字段自动映射到NTEXT字段。我将在创建视图时尝试cast解决方案,看看它是否有帮助。仅供参考,Salesforce中的长文本区域最多可以处理32768个字符,但我猜ntext最多只能处理8000个字符。因此,可能存在一些截断问题。感谢您的回复。我发现了这个问题,发现它有点神秘。salesforce对象有一个字段作为last_peer_review_date___c,没有向任何人授予任何权限。因此,DBAMP用户无法看到该字段,因此在我使用SF_Replicate命令时,未能在SQL server中创建该字段。CREATEVIEWSQL是我几周前创建的,当时它确实可以工作。现在,当我使用相同的SQL时,它失败了,因为SQL中有last_peer_review_date字段,但Account_Plan表没有。1在Salesforce中更改字段last_peer_review_date的权限2在SQL server中删除表Account_Plan 3使用SF_Replicate复制Account_Plan表,4再次执行create view语句。现在效果很好。你应该加上这个作为回答,然后接受它。然后有一个清晰的CSU使用记录。谢谢