在2005年SQL存储过程 - 与字段类型NTEXTTSQL - 案例上NTEXT(SQL 2005)
我写一个存储过程来将它导入到微软CRM之前整理的一些数据。 到目前为止一切正常。
但是我需要在nText字段上做一个case语句。它需要检查这个字段约3或4个文本值,并设置一个新的字段(已经在目标表中),这也是一个nText字段。
但是我得到的错误 “我也接触过一些文章,数据类型的ntext和varchar是等于运算符不兼容。
但是他们的解决方案都显得非常复杂。
谢谢
在2005年SQL存储过程 - 与字段类型NTEXTTSQL - 案例上NTEXT(SQL 2005)
我写一个存储过程来将它导入到微软CRM之前整理的一些数据。 到目前为止一切正常。
但是我需要在nText字段上做一个case语句。它需要检查这个字段约3或4个文本值,并设置一个新的字段(已经在目标表中),这也是一个nText字段。
但是我得到的错误 “我也接触过一些文章,数据类型的ntext和varchar是等于运算符不兼容。
但是他们的解决方案都显得非常复杂。
谢谢
我建议,如果可能的话,用NVARCHAR(MAX)替换NTEXT类型,因为NTEXT不是第一类类型和NVARCHAR。这应该很容易用ALTER TABLE语句来完成。
更高层次的代码不应该关心类型的变化。任何使用READTEXT,WRITETEXT等处理NTEXT列的过程代码都可以简化为基本的选择和更新。
如果类型更改不可行,则可能必须使用CAST()或CONVERT()运算符来包装比较和赋值,这很丑陋。
我改变了两个数据库字段,从ntext到varchar。这解决了我的SP问题。幸运之后,同步。回到CRM工作正常。 – Audioillity 2009-08-17 22:15:19
非常好,很乐意帮忙。 – devstuff 2009-08-18 04:24:37
在SQL Server 2005中不推荐使用NTEXT。您应该使用NVARCHAR(MAX),而不是(NVARCHAR(MAX)可以在CASE中使用)。是否可以更改类型?
是的,我看了看。我需要尝试一下,我们有一个同步的产品。使用CRM的SQL表,只要能应付它,应该没问题,如果没有,我需要找到一个解决方案。 – Audioillity 2009-08-17 14:36:33
检查下面的示例。这工作得很好。它使用一个转换为NVARCHAR(MAX)并用于CASE的NTEXT。祝你好运:-) – gsharp 2009-08-17 14:59:18
这个作品,以及
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
我可以问你,你有什么样的检查,以对这些NTEXT字段执行? 我不确定CASE再次NText字段将是有效的,因为它可能包含大量的数据。也许有一种更有效的方法,取决于你想做什么。 – Diego 2009-08-17 14:43:09
我知道现在混淆的地方。 首先我在MS CRM中创建了一个实体。然后,我使用一个程序在SQL中创建表的副本(这使我可以稍后进行同步)。但是,所有文本字段都是作为nText创建的。 其自身的数据长度为3-5个字节,新文本长度为2-5个字节。 – Audioillity 2009-08-17 14:55:53
哇,谈论矫枉过正...如果你将nText字段转换为合理大小的varchar,那么你应该没有问题。 – Diego 2009-08-17 15:09:54