sql-server – 将VARCHAR转换为VARBINARY
我在表格中记录了昂贵的运行查询及其查询计划,以便我们监控性能趋势并确定需要优化的区域. 但是,它已经到了查询计划占用太多空间的程度(因为我们正在针对每个查询存储整个计划). 因此,我试图通过将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 (编辑:91站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |