1

我正在尝试从表中创建 MS SQL 服务器中的视图。表名是 Account_Plan,我正在尝试将视图创建为 Account_Plan_vw。在执行 DDL 以创建视图时,我收到如下所示的错误。

消息 258,级别 15,状态 1,过程 Account_Plan_vw,第 56 行
无法调用 ntext 上的方法

消息 207,级别 16,状态 1,过程 Account_Plan_vw,第 22 行
无效的列名称“How_the_CU_will_achieve_these_objective2__c”。

错误消息将“How_the_CU_will_achieve_these_objective2__c”列显示为无效。但是,这是 ntext 类型的 Account_Plan 表中的有效列。

有人可以帮忙吗?我刚刚从 Create view 语句中删除了额外的列。

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
4

2 回答 2

1

这个问题,发现它有点神秘。salesforce 对象有一个字段 last_peer_review_date__c,没有授予任何人任何权限。结果,当我使用 SF_Replicate 命令时,DBAMP 用户无法看到该字段,因此错过了在 SQL Server 中创建该字段。创建视图 SQL 是我几周前创建的,当时它确实有效。现在,当我使用相同的 SQL 时,它失败了,因为 SQL 有 last_peer_review_date 字段,但 Account_Plan 表没有。

巴拉吉·普鲁里

于 2017-11-15T04:13:09.620 回答
1

NTEXT 已弃用,请将其转换为 NVARCHAR(MAX)

请参阅:ntext、文本和图像 (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
于 2017-11-08T01:20:10.727 回答