Ich versuche, japanische Zeichen an eine gespeicherte Prozedur in SQL Server zu übergeben. Die Zeichen werden während der Ausführung in ???? umgewandelt und daher erhalte ich inkorrekte Ergebnisse.
Wie gebe ich ihnen solche Zeichen? Ich habe versucht, mit nvarchar
da es Unicode akzeptiert, aber kein Glück. Wenn ich keine gespeicherte Prozedur verwende und die SQL-Abfragezeichenfolge dynamisch in meiner Anwendung konstruiere, funktionieren die Dinge gut. Freundlich helfen
Update
declare @string as nvarchar(1000)
SET @string = @keyword
SELECT * FROM TABLE where Title like @string
Aufgerufen mit
EXEC @return_value = StoredProcName
@keyword = N'Japanese Word'
Aktualisierung 2
Ich möchte folgendes hinzufügen, wenn das hilft. Die Konstruktion der Abfrage funktioniert dynamisch. Wenn Sie also in Ihrer Anwendung Folgendes schreiben würden sql = "select * from TABLE where Title like '"+[JapaneseWord]+"'"; funktioniert es. Ich kann nicht feststellen, wo der Unicode für einen gespeicherten Prozess fehlschlägt
Lösung
NVARCHAR ist der Schlüssel zum Problem. Falls es jemanden interessiert, wie man damit einen Freitext-Suchstring bildet, hier ist er
declare @string as nvarchar(100) set @string = 'FORMSOF(INLFLECTIONAL,"'+@string+'"))'
Verwenden Sie es dann in Ihrer Anfrage. Wie
select * from TABLE as TEMP INNERJOIN CONTAINSTABLE(#,#,@string) ......
Siehe MSDN oder relevante Dokumente
0 Stimmen
Wäre es möglich, die TSQL in Ihrer gespeicherten Prozedur hinzuzufügen? Wäre es so einfach, wie die Variable, die es in sendet nicht unterstützt Unicode? Oder vielleicht die Variable, die das Ergebnis zurückgibt?
0 Stimmen
Sind die Eingabeparameter Ihrer gespeicherten Prozedur vom Typ nvarchar, und sind Sie sicher, dass sie nicht an irgendeiner Stelle in der Prozedur (implizit) in Nicht-Unicode (varchar) konvertiert werden?
0 Stimmen
Also - noch einmal -. was nicht funktioniert? Du bekommst nichts zurück? Sie erhalten die falschen Informationen zurück? Wie sieht Ihre Tabellenstruktur aus? Ist die
Title
Spalte in Ihrer TabelleNVARCHAR
auch?0 Stimmen
Können Sie die completa gespeicherte Prozedur - auch ihre Deklaration (der Parameter und alles andere)? Außerdem: Warum nehmen Sie in der
@keyword NVARCHAR
und kopiert sie herum? Warum nicht einfach verwendenSELECT ... FROM dbo.Table WHERE Title LIKE @keyword
?? Gibt es einen bestimmten Grund?0 Stimmen
Ich führe eine Freitextsuche durch. Ich verwende String, um die Abfrage CONTAINSTABLE(.....) zu konstruieren. Das ist der Grund, warum string vorhanden ist. Und ich bekomme nichts zurück... im Grunde sagt es keine Übereinstimmung gefunden. Aber wenn ich die Abfrage stattdessen im Code konstruiere, erhalte ich eine Übereinstimmung