Sql server內部函式fn_PhysLocFormatter存在解析錯誤(續)
Sql server內部函式fn_PhysLocFormatter存在解析錯誤,見http://space.itpub.net/81227/viewspace-751651
本文給出錯誤原因。
先看下sys.fn_PhysLocFormatter函式的定義:
select OBJECT_DEFINITION(object_id('sys.fn_PhysLocFormatter'))
go
-------------------------------------------------------------------------------
-- Name: sys.fn_PhysLocFormatter
--
-- Description:
-- Formats the output of %%physloc%% virtual column
--
-- Notes:
-------------------------------------------------------------------------------
create function sys.fn_PhysLocFormatter (@physical_locator binary (8))
returns varchar (128)
as
begin
declare @page_id binary (4)
declare @file_id binary (2)
declare @slot_id binary (2)
-- Page ID is the first four bytes, then 2 bytes of page ID, then 2 bytes of slot
--
select @page_id = convert (binary (4), reverse (substring (@physical_locator, 1, 4)))
select @file_id = convert (binary (2), reverse (substring (@physical_locator, 5, 2)))
select @slot_id = convert (binary (2), reverse (substring (@physical_locator, 7, 2)))
return '(' + cast (cast (@file_id as int) as varchar) + ':'
+ cast (cast (@page_id as int) as varchar) + ':'
+ cast (cast (@slot_id as int) as varchar) + ')'
end
再看下reverse函式:
select reverse('工人')
----
人工
(1 行受影響)
select reverse('12345工人')
---------
人工54321
(1 行受影響)
select reverse('工12345人')
---------
人54321工
(1 行受影響)
結論:問題出在reverse函式上。
reverse函式的作用是字元反轉,而不是位元組反轉,當遇到81-FE之間的位元組時,被認為是雙位元組字元而組合在一起參與反轉操作,造成了錯誤。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/81227/viewspace-751898/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Sql server內部函式fn_PhysLocFormatter存在解析錯誤SQLServer函式ORM
- sql server 建立內聯表值函式SQLServer函式
- 急 !!SQL SERVER錯誤SQLServer
- SQL Server 內建轉換函式介紹SQLServer函式
- SQL Server 2008一個酷酷的函式:fn_PhysLocFormatter,返回記錄的rowidSQLServer函式ORM
- 如何在 Go 中優雅的處理和返回錯誤(1)——函式內部的錯誤處理Go函式
- SQL Server的“錯誤:9004”SQLServer
- SQL Server 錯誤日誌SQLServer
- Sql Server 日期函式SQLServer函式
- SQL SERVER 字串函式SQLServer字串函式
- SQL server錯誤:53和 SQL server錯誤:17 ,小樣你在劫難逃SQLServer
- 如何在函式內部定義函式?函式
- SQL Server最佳化標量函式改寫內聯表值函式SQLServer函式
- SQL Server 容易忽略的錯誤SQLServer
- Microsoft SQL Server,錯誤: 20582ROSSQLServer
- 如何在函式計算內部中自定義DNS解析函式DNS
- SQL Server常用函式整理SQLServer函式
- Sql Server系列:字串函式SQLServer字串函式
- Sql Server系列:聚合函式SQLServer函式
- Sql Server系列:排序函式SQLServer排序函式
- Sql server 分割符函式SQLServer函式
- SQL SERVER 數學函式SQLServer函式
- SQL SERVER 系統函式SQLServer函式
- SQL SERVER 自定義函式SQLServer函式
- SQL Server函式總結SQLServer函式
- SQL Server CONVERT() 函式SQLServer函式
- Sql Server函式全解(1):字串函式SQLServer函式字串
- Sql Server函式全解(一)字串函式SQLServer函式字串
- Sql Server判斷資料庫、表、儲存過程、函式是否存在SQLServer資料庫儲存過程函式
- Sql Server函式全解(2):數學函式SQLServer函式
- Sql Server函式全解(5):系統函式SQLServer函式
- SQL Server ErrorLog 錯誤日誌SQLServerError
- Mysql與Sql Server DATEDIFF函式MySqlServer函式
- Sql Server系列:自定義函式SQLServer函式
- Sql Server系列:系統函式SQLServer函式
- SQL SERVER 函式中文文件SQLServer函式
- Sql Server 2005函式SQLServer函式
- Sql Server函式全解(五)之系統函式SQLServer函式