5 Stimmen

Übergabe japanischer Zeichen an eine gespeicherte SQL Server-Prozedur

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 Tabelle NVARCHAR auch?

9voto

marc_s Punkte 701497

Sie müssen unbedingt Folgendes verwenden NVARCHAR als Datentyp, und wenn Sie dies in SQL Server Mgmt Studio oder von einer "Inline"-SQL-Abfrage aus ausführen, müssen Sie sicherstellen, dass Sie den String-Literalen ein Präfix N'.....' Vorwahl.

Ihr Stored Proc sollte also etwa so aussehen:

CREATE PROCEDURE dbo.YourProc  @Param1 NVARCHAR(100)
AS
   SELECT N'Test - [' + @Param1 + N'] - end of test'

Und dann rufen Sie dies mit auf:

EXEC dbo.YourProc   N'foo-bar-value'

Sollte ergeben:

Test - [foo-bar-value] - end of test

und natürlich wäre das alles noch viel schöner, wenn ich wüsste, wie man japanische Schriftzeichen hier reinbekommt.... :-)

Aktualisierung: OK, ich habe ein paar zufällige kyrillische und thailändische Zeichen ausgewählt, von denen ich sicher bin, dass sie NVARCHAR und ich habe den Eindruck, dass es funktioniert:

EXEC dbo.YourProc   N'            '

Test - [            ] - end of test

EXEC dbo.YourProc   N'            '

Test - [            ] - end of test

Ich bin mir nicht sicher, warum dieser Unicode-basierte Test funktioniert und warum er nicht mit japanischen Zeichen funktionieren sollte....

Update #2: Danke für Wikipedia - das soll "Tokio" bedeuten, in Hiragana - scheint zu funktionieren:

EXEC dbo.YourProc   N''

Test - [] - end of test

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X