加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql-server – 将VARCHAR转换为VARBINARY

发布时间:2021-03-05 08:21:43 所属栏目:编程 来源:网络整理
导读:我在表格中记录了昂贵的运行查询及其查询打算,以便我们监控机能趋势并确定必要优化的地区. 可是,它已经到了查询打算占用太多空间的水平(由于我们正在针对每个查询存储整个打算). 因此,我试图通过将QueryPlanHash和QueryPlan提取到另一个表来类型化现稀有据. C

我在表格中记录了昂贵的运行查询及其查询打算,以便我们监控机能趋势并确定必要优化的地区.

可是,它已经到了查询打算占用太多空间的水平(由于我们正在针对每个查询存储整个打算).

因此,我试图通过将QueryPlanHash和QueryPlan提取到另一个表来类型化现稀有据.

CREATE TABLE QueryPlans
(
    QueryPlanHash VARBINARY(25),QueryPlan XML,CONSTRAINT PK_QueryPlans PRIMARY KEY
    (
      QueryPlanHash
    )
);

因为sys.dm_exec_query_stats中query_plan_hash的界说是二进制字段(我常常插入新数据),我在新表中行使VARBINARY作为数据范例.

可是,下面的插入失败了……

INSERT INTO QueryPlans
    ( QueryPlanHash,QueryPlan )
SELECT queryplanhash,queryplan
FROM
(
    SELECT 
      p.value('(./@QueryPlanHash)[1]','varchar(20)') queryplanhash,QueryPlan,ROW_NUMBER() OVER (PARTITION BY p.value('(./@QueryPlanHash)[1]','varchar(20)') ORDER BY DateRecorded) rownum
    FROM table
    CROSS APPLY QueryPlan.nodes('/ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple[@QueryPlanHash]') t(p)
) data
WHERE rownum = 1

….带错误

Implicit conversion from data type varchar to varbinary is not allowed. Use the CONVERT function to run this query.

题目是查询打算哈希值已经是二进制名目,可是在XML查询打算中存储为VARCHAR,譬喻

0x9473FBCCBC01AFE

和CONVERT到BINARY给出了完全差异的值

0x3078393437334642434342433031414645

我实行将XQuery select中的值界说变动为二进制,但之后它没有返回任何值.

怎样从XML查询打算中将0x9473FBCCBC01AFE的值作为VARBINARY而不是VARCHAR提取?

办理要领

当您但愿在从字符串转换时保持沟通的二进制值时,您必要行使特定样式.不然,SQL Server会实行对字符串举办编码,要领与编码“bob”或“frank”的方法沟通.

也就是说,您的输入字符串看起来不正确 – 穷乏一个字节或一个字节太多.假如我删除尾随E,这可以正常事变:

SELECT CONVERT(VARBINARY(25),'0x9473FBCCBC01AF',1);
------------ the,1 is important ---------------^^^

功效是二进制的:

----------------
0x9473FBCCBC01AF

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读