Ich schreibe eine gespeicherte Prozedur und ich muss eine SQL Server-Variable mit einer Spalte vergleichen. Das Problem ist, dass wenn meine SQL-Variable ein VARCHAR ist, der nicht die gleiche Länge wie der Spaltentyp hat, wird es nicht übereinstimmen.Vergleichen von VARCHARs unterschiedlicher Länge
Beispiel:
Lassen Sie uns sagen, ich habe eine Tabelle types
mit einer Spalte name
, die einen Typ VARCHAR(100)
hat. den Code ausführen, werden mir keine Ergebnisse geben:
DECLARE @type VARCHAR(100);
SET @type = 'My Type Name';
select * from types where name = @type
Nun, ich möchte in der Lage sein, es zu tun, die erste:
DECLARE @type VARCHAR(20);
SET @type = 'My Type Name';
select * from types where name = @type
jedoch diese Abfrage ausgeführt wird meine Spalte finden Übrigens, wenn ich die Spalte modifiziere, möchte ich nicht, dass diese Abfrage fehlschlägt. Kann mir jemand sagen, was ich falsch mache?
Edit:
Hier ist meine Spalte Schema:
Abfrage:
DECLARE @event_type VARCHAR(20);
SET @event_type = 'Price Increase Notification';
select * from events.types where name = @event_type
Ausgang:
Abfrage:
DECLARE @event_type VARCHAR(100);
SET @event_type = 'Price Increase Notification';
select * from events.types where name = @event_type
Ausgang:
Können Sie einige Beispieldaten gemeinsam nutzen, wo Sie in diesem Fall finden? ''My Type Name' 'in einer Zeichenfolge der Länge 20 entspricht" My Type Name "in einer Zeichenfolge der Länge 100.Wenn Sie versuchen, eine Variable der Länge 20 auf einen Wert mit einer größeren Länge zu setzen, wird sie abgeschnitten, und Sie erhalten möglicherweise unerwartete Ergebnisse. – HoneyBadger
Wenn die Eingabe "Mein Typname" mehr als 20 Zeichen enthält, schlägt die erste fehl. Die Eingabe wird auf 20 Zeichen gekürzt und mit name überprüft. Es wird keine Ausnahme oder Warnung werfen –
Aktualisiert die Frage mit Beispielen. – snyderxc