2017-06-10 2 views
0

Ich konvertierte vor kurzem alle ntext Spaltentypen in meiner Datenbank zu nvarchar (max). Ich führte dann EXECUTE sp_refreshview für die verwandten Ansichten.Parameterabfrage auf nvarchar (max) zeigt als ntext Fehler

Doch wenn ich die folgende Parameter-Abfrage (von klassischen ASP) auf einem Blick laufen lasse, erhalte ich eine Fehlermeldung: Abfrage:

SELECT CARID 
FROM  vwCAR 
WHERE (1=1) 
AND  (Description LIKE '%'+ ? + '%') 
ORDER BY CARID; 

Error: The data types nvarchar and ntext are incompatible in the add operator (yet there are no longer any ntext columns!)

Doch diesen Fehler verstehe ich nicht, wenn ich die laufen gleiche Abfrage direkt SQL Server ohne die? Parameter wie: Abfrage:

SELECT CARID 
FROM vwCAR 
WHERE (1=1) 
AND  (Description LIKE '%test%') 
ORDER BY CARID; 

Ich habe versucht, in der Abfrage konvertieren mit, hatte aber gleiches Ergebnis: Abfrage:

SELECT CARID 
FROM  vwCAR 
WHERE (1=1) 
AND  (CONVERT(NVARCHAR(MAX), Description) LIKE N'%'+ ? + '%') 
ORDER BY CARID; 

Was mache ich falsch?

Zusätzliche Informationen: Ich änderte den Typ in nVarChar (4000) statt (MAX) und alles funktioniert gut. Dies ist eine Arbeit, aber es hat das Problem gelöst.

Nur so werde ich für die Zukunft wissen, ist es möglich, eine Parameterabfrage mit LIKE-Kriterien auf eine nVarChar (Max) -Typ-Spalte ausführen?

(Danke @McNets für den Posten aufzuräumen .. Ich bin neu in diesem)

+0

Sie können eine Antwort mit der Lösung hinzufügen. – McNets

Antwort

0

I war der falschen Feldtyp adLongVarWChar (203) in dem Parameter verwendet wird. Hätte adVarWChar (202) für den Typ nvarchar (max) verwenden sollen.

Verwirrung entstand, als ich den Feldtyp direkt aus der Datenbank abgerufen, wie unten angegeben, gab 203 für den Typ Nvarchar (Max) zurück, so nahm ich an, dass die Einstellung des Parameters basierend auf diesem Typ funktionieren würde.
For each ofield in objRS.Fields Redim Preserve FieldTypes(1,x) FieldTypes(0,x) = ofield.type FieldTypes(1,x) = ofield.definedsize x = x + 1 Next

0

Versuch einzustellen, bevor:

Set @value = '%' + @value + '%';

dann verwenden:

(Beschreibung wie @value)

Verwandte Themen