如果第一次轉換失敗,那麼如何做另一次轉換?結合十六進制字符串與0x
我有一個觸發器,在數據被插入到表後,觸發器將把十六進制數據存儲在列中,在另一列(同一行)上進行轉換和更新。
目前我們客戶的信息是,程序員可能會發送自定義十六進制數據。假設文本是「你好」,十六進制是HexData =「68656c6c6f」。目前處於觸發狀態,轉換如下: -
SELECT CONVERT(varchar(max),CONVERT(varbinary(MAX), HexData, 2));
這將導致「hello」。但是,如果程序員發送十六進制爲「0x68656c6c6f」,這種轉換將失敗,出現錯誤: -
Msg 8114, Level 16, State 5, Line 9 Error converting data type varchar to varbinary.
因此,如果程序員發送的HexData =「0x68656c6c6f」,這個查詢的工作: -
SELECT CONVERT(varchar(max),CONVERT(varbinary(MAX), [HexData], 1));
如果2失敗,我怎麼能把這個陳述放進去呢?
**發送此信息的程序員來自我的客戶的另一個部門。雖然他們說程序員會發送自定義的Hex。
觸發聲明: - - :要麼以 「0x」 或直接六角
更新的起始
ALTER TRIGGER [dbo].[Hex_Automation] ON [dbo].[DimHexRaw]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
UPDATE [DimHexRaw] SET [Data_ASCII] = (CONVERT(varchar(max),CONVERT(varbinary(MAX), [HexData], 2))),
[Timestamp_IO] = (dateadd(microsecond,[Macrosec],TRY_CONVERT([datetime2],[Timestamp]))),
[DateKey] = (CONVERT([varchar](35),[Timestamp],(112))),
[TimeKey] = (replace(CONVERT([varchar](8),[Timestamp],(108)),':',''))
WHERE [DimHexRaw].[HexData] IS NOT NULL AND [DimHexRaw].[isProcess] = 0
END
例:
SELECT CONVERT(varchar(max),CONVERT(varbinary(MAX), '03141D365F531C558F0902FC65BF1851F58A21BE55ED8216AB3FD365F88C1FB347DAE176', 1)));
返回:
Msg 8114, Level 16, State 5, Line 13 Error converting data type varchar to varbinary.
但有了這個腳本: -
SELECT CONVERT(varchar(max),CONVERT(varbinary(MAX), 0x03141D365F531C558F0902FC65BF1851F58A21BE55ED8216AB3FD365F88C1FB347DAE176, 1));
這導致: -
6_SU üe¿QõŠ!¾Uí‚«?ÓeøŒ³GÚáv
如何結合 '03141D365F531C558F0902FC65BF1851F58A21BE55ED8216AB3FD365F88C1FB347DAE176' 以0x所以可以0x03141D365F531C558F0902FC65BF1851F58A21BE55ED8216AB3FD365F88C1FB347DAE176?
您正在使用哪個版本的SQL Server? SQL 2012及更高版本具有可用於執行安全轉換測試的'TRY_CONVERT','TRY_CAST'和'TRY_PARSE'。 –
埃德,我也使用TRY_CONVERT,但結果,它通過並使列變爲空 – Luiey