Sql server 2005 TSQL-Ntext上的案例(SQL 2005)

Sql server 2005 TSQL-Ntext上的案例(SQL 2005),sql-server-2005,tsql,stored-procedures,Sql Server 2005,Tsql,Stored Procedures,SQL 2005中的存储过程-字段类型为NText 我正在编写一个存储过程来整理一些数据,然后再将其导入Microsoft CRM。 到目前为止一切正常 但是我需要在一个nText字段上做一个case语句。它需要对照大约3或4个文本值检查此字段,并设置一个新字段(已在目标表中),该字段也是一个nText字段 然而,我得到的错误 “在等于运算符中,数据类型ntext和varchar不兼容 我遇到过几篇文章,但它们的解决方案似乎都非常复杂 感谢您在advanced中提供的帮助和建议。在SQL Ser

SQL 2005中的存储过程-字段类型为NText

我正在编写一个存储过程来整理一些数据,然后再将其导入Microsoft CRM。 到目前为止一切正常

但是我需要在一个nText字段上做一个case语句。它需要对照大约3或4个文本值检查此字段,并设置一个新字段(已在目标表中),该字段也是一个nText字段

然而,我得到的错误 “在等于运算符中,数据类型ntext和varchar不兼容

我遇到过几篇文章,但它们的解决方案似乎都非常复杂


感谢您在advanced中提供的帮助和建议。

在SQL Server 2005中不推荐使用NTEXT。您应该改用NVARCHAR(MAX)(可以在案例中使用NVARCHAR(MAX))。您是否可以更改类型?

如果可能,我建议将NTEXT类型替换为NVARCHAR(MAX),因为NTEXT不是第一类类型,而NVARCHAR是。使用ALTERTABLE语句应该很容易做到这一点

大多数高级代码不应该关心类型的更改。任何使用READTEXT、WRITETEXT等处理NTEXT列的过程代码都可以简化为基本的选择和更新

如果无法更改类型,您可能必须使用CAST()或CONVERT()运算符包装比较和赋值,这很难看。

这也适用

CREATE TABLE #TEMP
(
    MyDummy NTEXT
)

INSERT INTO #TEMP (MyDummy) Values ('test')

SELECT 
CASE CAST(MyDummy AS NVARCHAR(MAX)) WHEN 'test' THEN 'ok' ELSE 'NOK' END MyTest
FROM #temp

drop table #temp

是的,我看了一下。我需要尝试一下,我们有一个产品,可以将.SQL表与CRM同步,只要能够处理它就可以了,如果不能,我需要找到一个解决方案。检查我下面的示例。这也行得通。它使用了一个转换为NVARCHAR(MAX)的NTEXT并用在案例中。祝你好运:-)我可以问你,你必须对这些NText字段执行什么样的检查吗?我不确定案例是否有效,因为NText字段可能包含大量数据。也许有一种更有效的方法,取决于你想做什么。我知道现在的困惑在哪里。首先,我在MS CRM中创建了一个实体。然后,我使用一个程序在SQL中创建了一个表的副本(这允许我以后进行同步)。但是,所有文本字段都创建为nText。其本身的数据长度为3-5个chrs,新文本长度为2-5个chrs。哇,说得太多了…如果将nText字段转换为大小合理的varchar,则应该没有问题。更改每个表上的两个字段可以解决此问题,并且还可以将其正确导入到CRMThanks中以感谢大家抽出时间回答我的问题。我将两个数据库字段从ntext更改为varchar。这解决了我的SP问题。幸运的是,在这之后,sync.back-to-CRM正常工作。