我想在T-SQL中从varbinary
类型转换为字符串类型
这是一个例子:
首先,我得到了这个 varbinary
0x21232F297A57A5A743894A0E4A801FC3
Run Code Online (Sandbox Code Playgroud)
然后我想把它转换成
21232f297a57a5a743894a0e4a801fc3
Run Code Online (Sandbox Code Playgroud)
这该怎么做?
我有一些varbinary数据存储在MS Sql Server 2005的表中.是否有人使用SQL代码将查询作为输入(假设查询保证返回单列varbinary)并将字节输出到磁盘(一个文件)每行?)我确信之前已经问了一千次,但谷歌搜索提出的主要是.net解决方案.我想要一个SQL解决方案.
前一段时间我问了一个关于SQL Server中层次结构/版本号排序的问题.( 如何使用SQL Server查询对"版本号"列进行排序).
提交的答案中包含了与TSQL编码挑战相关的链接.
在SQL2000解决方案中,作者演示了两个变体,一个使用并返回varchar,另一个使用varbinary.作者解释说他没有解释为什么这样做.
那么,我的问题是,方法上的差异有哪些主要差异/优势(如果有的话)?即为什么使用varbinary而不是varchar?
我省略了发布代码,因为它在上面的文章中总结得最为优雅.
我有一个表,其中userpassword字段有varbinary数据类型,所以我很困惑,我应该以哪种形式将数据保存到userpassword字段,因为当我保存varchar数据时,它给了我错误.
基本上我试图给用户一个特定的密码,所以我可以在系统上测试一些功能,因为我只有我们的管理员帐户,我不能玩,我只是选择一个随机帐户,所以我可以做我的测试.所以这是我尝试更新:
UPDATE dbo.Login
SET
Salt=CAST('bPftidzyAQik' AS VARBINARY),
Password=CAST('0x2B89C2954E18E15759545A421D243E251784FA009E46F7A163926247FDB945F85F095DBB1FFF5B2B43A6ADAE27B8C46E176902412C4F8943E39528FF94E0DD5B' AS VARBINARY)
WHERE LoginID=10947
Run Code Online (Sandbox Code Playgroud)
它运行正常,但数据库中的代码看起来是日语的一个,而另一个的语法看起来很好,但它不是我输入的值,我希望它使用我输入的确切值,所以我可以登录.如何我这样做吗?我已经尝试了几种不同的演员和转换解决方案而没有运气.
在过去,我在查询varbinary(max)列时注意到了糟糕的性能.可以理解,但在检查它是否为空时似乎也会发生,我希望引擎会改为采取一些快捷方式.
select top 100 * from Files where Content is null
Run Code Online (Sandbox Code Playgroud)
我怀疑它很慢,因为它是
这个问题似乎不同意我这里缓慢的前提,但我似乎一次又一次地遇到二进制字段的性能问题.
我想到的一个可能的解决方案是创建一个被索引的计算列:
alter table Files
add ContentLength as ISNULL(DATALENGTH(Content),0) persisted
CREATE NONCLUSTERED INDEX [IX_Files_ContentLength] ON [dbo].[Files]
(
[ContentLength] ASC
)
select top 100 * from Files where ContentLength = 0
Run Code Online (Sandbox Code Playgroud)
这是一个有效的策略吗?当涉及二进制字段时,有哪些其他方法可以有效地进行查询?
是否可以在Transact-SQL的varbinary(max)列中插入文件?如果是的话,我会很高兴有一个代码片段,至少让我知道如何做到这一点.
谢谢
我在互联网上阅读有关SQL Server数据类型的这些陈述:
VARBINARY(MAX)
- 具有可变长度的二进制字符串可以存储最多2 ^ 31-1个字节.
IMAGE
- 二进制字符串,可变长度最大为2 ^ 31-1(2,147,483,647)字节.
VARBINARY(MAX)
和IMAGE
数据类型之间是否存在非常大的技术差异?
如果存在差异:我们是否必须自定义ADO.NET如何在SQL Server中插入和更新图像数据字段?
如何在源代码大小为varbinary(max)的sql server 2005表中创建一个varbinary字段,以获得流畅的nhibernate?目前我总是得到varbinary(8000)的默认值,这不够大,因为我将存储图像文件.
我尝试过使用CAstle.ActiveRecord但尚未取得任何成功.
[ActiveRecord]
public class MyFile : Entity
{
public virtual string FileName { get; set; }
public virtual string FileType { get; set; }
public virtual int FileVersion { get; set; }
public virtual int FileLength { get; set; }
[Property(ColumnType = "BinaryBlob", SqlType = "VARBINARY(MAX)")]
public virtual byte[] FileData { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
几个小时都未能找到解决方案,所以提前谢谢
捷克克朗
我在sql表中保存文件(任何类型),使用varbinary(max),我发现这个数据类型的最大用量是8000,但8000是什么意思?
在线文档说这是8000字节,这意味着要保存的文件的最大大小是8000/1024 = 7.8125 KB ?,
我开始测试,我可以存储的最大文件是29.9 MB,如果我选择一个更大的文件,得到一个Sqlexception"字符串或二进制数据将被截断.该语句已被终止." ...
非常感谢任何评论.
varbinary ×10
sql-server ×7
sql ×6
ado.net ×1
binary ×1
blob ×1
image ×1
insert ×1
nhibernate ×1
performance ×1
sql-update ×1
string ×1
types ×1
varchar ×1