是否可以將binary資料存盤為varchar/nvarchar在 SQL 服務器表中?
示例 我正在嘗試將二進制資料存盤 0x6806000004000000為nvarchar資料型別,但在嘗試保存到表中時,值被空白。我希望它們存盤為字串
使用的代碼
declare @tempBinayToVarchar table (FinalValue NVARCHAR(60))
Insert into @tempBinayToVarchar
select Value from basetable
表中的值是如下值:
0x000000000000000000000000000000000000000000000000000000000000004
uj5u.com熱心網友回復:
TL;DR:將您的二進制資料存盤在 a 中varbinary,如果您“必須”將其存盤在(n)varchar資料型別中,請不要期望可讀資訊。
該值沒有被清除。正如我在評論中提到的,0x00a varchar( 0x0000for an nvarchar) 的值是一個null字符;應用程式無法顯示此字符,許多應用程式實際上將其決議為字串的結尾。
但是,這并不意味著該值消失了,它只是無法顯示。您可以使用以下 SQL 看到這一點:
CREATE TABLE dbo.SomeTable (BinaryString varchar(100),
ActualBinary AS CONVERT(varbinary(100), BinaryString));
GO
INSERT INTO dbo.SomeTable (BinaryString)
VALUES(0x6806000004000000),
(0x006806000004000000);
GO
SELECT *
FROM dbo.SomeTable;
GO
DROP TABLE dbo.SomeTable;
請注意,列ActualBinary 中的值是插入的二進制值。但是,在您的應用程式中,您可能一無所獲。在 ADS 中,兩行都以 a 為前綴,但在 SSMS 中,以字符h開頭的行一無所獲:null
廣告:

SSMS:

uj5u.com熱心網友回復:
如果您嘗試僅將 存盤0x000...為字串而不將其轉換為二進制值實際表示的內容,則可以使用CONVERT(0x000..., 1)但對于您問題中的特定值,您需要超過 60 個字符。
DECLARE @tempBinayToNvarchar table (FinalValue nvarchar(120));
INSERT @tempBinayToNvarchar(FinalValue)
SELECT CONVERT(nvarchar(120),
0x000000000000000000000000000000000000000000000000000000000000004,
1);
SELECT FinalValue FROM @tempBinayToNvarchar;
輸出:
| 終值 |
|---|
| 0x000000000000000000000000000000000000000000000000000000000000000004 |
- 示例db<>fiddle
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/454755.html
標籤:sql服务器
下一篇:需要查詢以逗號分隔的列上的表連接
