Ich versuche, relationalen Speicher abzufragen, um Objekte mit einem anderen in einem Paket (broadcast.FirmwareVersionReported
) angegebenen Wert zurückzugeben, als der zuletzt gemeldete Wert (device.firmwareid
).T-SQL Vergleichen von varchar alphanumerischem Wert mit int-Wert
- Spalte
broadcast.FirmwareVersionReported
ist vom Typvarchar
Wert Beispiel
001
ist.Die Säule
device.firmwareid
ist vom Typint
.- Wertbeispiel ist
0001XX
.
Testing
ich versucht, das Spielfeld Ebene von LEFT
mit den letzten beiden Zeichen aus der Säule firmware.softwareid
und verwendet CAST ändern beide auf einen VARCHAR
entfernen Sie den Vergleich zu ermöglichen. Es ist klar, dieser Ansatz ist jedoch nicht korrekt.
select
LEFT(CAST(firmware.softwareid as VARCHAR),4) AS softwareid,
CAST(broadcast.[FirmwareVersionReported] as VARCHAR)
from
device
inner join
broadcast on broadcast.deviceid = device.deviceid
inner join
firmware on firmware.firmwareid = device.firmwareid
where
softwareid <> [FirmwareVersionReported]
Ergebnis
Msg 468, Ebene 16, Status 9, Zeile 7
Kann Sortierungskonflikt zwischen "SQL_Latin1_General_CP1_CI_AS" und "Latin1_General_CI_AS" in der nicht gleich den Betrieb nicht lösen.
Tables
Sendungs
[DeviceId] [int],
[FirmwareVersionReported] [varchar](10),
Firmware
[FirmwareID] [int] IDENTITY(1,1),
[SoftwareID] [varchar](10),
[PacketSoftwareID] [varchar](10),
Geräte
[DeviceID] [int] IDENTITY(1,1),
[FirmwareID] [int],
Frage
Auf der Suche nach Ratschlägen zur bestmöglichen Lösung dieses Problems bitte.
Sie müssen Collate vor – Alex
Vergleich Ich denke, Sie sollten alle Sortierungen machen gleich sein immer zu vermeiden Sortierungen für keine Umwandlung Grund. –