2009-08-17 51 views
0

在2005年SQL存储过程 - 与字段类型NTEXTTSQL - 案例上NTEXT(SQL 2005)

我写一个存储过程来将它导入到微软CRM之前整理的一些数据。 到目前为止一切正常。

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

但是我得到的错误 “我也接触过一些文章,数据类型的ntext和varchar是等于运算符不兼容。

但是他们的解决方案都显得非常复杂。

谢谢

+0

我可以问你,你有什么样的检查,以对这些NTEXT字段执行? 我不确定CASE再次NText字段将是有效的,因为它可能包含大量的数据。也许有一种更有效的方法,取决于你想做什么。 – Diego 2009-08-17 14:43:09

+0

我知道现在混淆的地方。 首先我在MS CRM中创建了一个实体。然后,我使用一个程序在SQL中创建表的副本(这使我可以稍后进行同步)。但是,所有文本字段都是作为nText创建的。 其自身的数据长度为3-5个字节,新文本长度为2-5个字节。 – Audioillity 2009-08-17 14:55:53

+0

哇,谈论矫枉过正...如果你将nText字段转换为合理大小的varchar,那么你应该没有问题。 – Diego 2009-08-17 15:09:54

回答

5

我建议,如果可能的话,用NVARCHAR(MAX)替换NTEXT类型,因为NTEXT不是第一类类型和NVARCHAR。这应该很容易用ALTER TABLE语句来完成。

更高层次的代码不应该关心类型的变化。任何使用READTEXT,WRITETEXT等处理NTEXT列的过程代码都可以简化为基本的选择和更新。

如果类型更改不可行,则可能必须使用CAST()或CONVERT()运算符来包装比较和赋值,这很丑陋。

+0

我改变了两个数据库字段,从ntext到varchar。这解决了我的SP问题。幸运之后,同步。回到CRM工作正常。 – Audioillity 2009-08-17 22:15:19

+0

非常好,很乐意帮忙。 – devstuff 2009-08-18 04:24:37

3

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

+0

是的,我看了看。我需要尝试一下,我们有一个同步的产品。使用CRM的SQL表,只要能应付它,应该没问题,如果没有,我需要找到一个解决方案。 – Audioillity 2009-08-17 14:36:33

+0

检查下面的示例。这工作得很好。它使用一个转换为NVARCHAR(MAX)并用于CASE的NTEXT。祝你好运:-) – gsharp 2009-08-17 14:59:18

1

这个作品,以及

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