2009-08-17 10 views
0

Stored Procedures in SQL 2005 - mit Feldtyp NTextTSQL - Case auf Ntext (SQL 2005)

Im Schreiben einer gespeicherten Prozedur einige Daten aufzuräumen, bevor es in Microsoft CRM importieren. Bis jetzt funktioniert alles gut.

Allerdings muss ich eine case-Anweisung auf einem nText-Feld tun. Es muss dieses Feld mit ungefähr 3 oder 4 Textwerten überprüfen und ein neues Feld (bereits in der Zieltabelle) setzen, das auch ein nText-Feld ist.

aber ich die Störung erhalte „Die Datentypen ntext und varchar in der gleich Operator unvereinbar sind.

ich über ein paar Artikel gekommen sind, aber ihre Lösungen scheinen alle sehr komplex.

Dank

+0

Darf ich Sie fragen, welche Art von Kontrollen haben Sie auf diese NText Felder durchführen? Ich bin mir nicht sicher, ein CASE wieder ein NText-Feld wäre effizient, da es eine erhebliche Menge an Daten enthalten könnte. Vielleicht gibt es einen effizienteren Ansatz, je nachdem, was Sie tun möchten. – Diego

+0

Ich weiß, wo die Verwirrung jetzt hereinkommt. Zuerst habe ich eine Entität in MS CRM erstellt. Ich habe dann ein Programm benutzt, um eine Kopie der Tabelle in SQL zu erstellen (das erlaubt mir, später zu synchronisieren). Alle Textfelder wurden jedoch als nText erstellt. Die Daten selbst sind 3-5 chrs lang und der neue Text ist 2-5 chs lang. – Audioillity

+0

Wow, reden über Overkill ... Dann sollten Sie kein Problem haben, wenn Sie die nText Felder in eine vernünftige Größe Varchar konvertieren. – Diego

Antwort

5

Ich empfehle, wenn überhaupt, den NTEXT-Typ durch NVARCHAR (MAX) zu ersetzen, da NTEXT kein Erstklassentyp und NVARCHAR ist. Dies sollte mit einer ALTER TABLE-Anweisung einfach zu tun sein.

Der Code der meisten höheren Ebene sollte sich nicht um die Typänderung kümmern. Jeder prozedurale Code, der READTEXT, WRITETEXT usw. verwendet, um mit den NTEXT-Spalten umzugehen, kann auf einfache Auswahlen und Aktualisierungen vereinfacht werden.

Wenn die Typänderung nicht möglich ist, müssen Sie die Vergleiche und Zuweisungen möglicherweise mit den Operatoren CAST() oder CONVERT() umbrechen, was unschön ist.

+0

Ich habe die zwei Datenbankfelder von ntext auf varchar geändert. Das hat mein SP-Problem gelöst. Nach diesem glücklicherweise die Synchronisierung. zurück in CRM funktionierte korrekt. – Audioillity

+0

Ausgezeichnet, froh zu helfen. – devstuff

3

NTEXT ist in SQL Server 2005 veraltet, Sie sollten stattdessen NVARCHAR (MAX) verwenden (NVARCHAR (MAX) kann in CASE verwendet werden) Ist es möglich, den Typ zu ändern?

+0

Ja, ich habe mir das mal angeschaut. Ich werde es ausprobieren müssen, wir haben ein Produkt, das synchronisiert. SQL-Tabellen mit CRM, so lange es das schafft, sollten in Ordnung sein, wenn nicht, muss ich eine Lösung finden. – Audioillity

+0

Überprüfen Sie mein Beispiel unten. das funktioniert auch gut. Es verwendet einen NTEXT, der an NVARCHAR (MAX) übergeben und in einem CASE verwendet wird. Viel Glück :-) – gsharp

1

das funktioniert auch

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