You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
2.1 KiB
100 lines
2.1 KiB
--
|
|
-- convert dec to hex string
|
|
--
|
|
CREATE PROCEDURE #Dec2hex
|
|
@stHex nvarchar(8) OUTPUT,
|
|
@iDec bigint
|
|
AS
|
|
DECLARE @iDigit int
|
|
SET @stHex = ""
|
|
|
|
IF @iDec < 0
|
|
SET @iDec = 0xFFFFFFFF + @iDec + 1
|
|
|
|
WHILE @iDec <> 0
|
|
BEGIN
|
|
SET @iDigit = @iDec % 16
|
|
SET @iDec = @iDec / 16
|
|
|
|
IF @iDigit < 10
|
|
SET @stHex = @stHex + CAST(@iDigit AS nvarchar(1))
|
|
ELSE
|
|
SET @stHex = @stHex + CHAR(ASCII('A') + @iDigit - 10)
|
|
END
|
|
|
|
SET @stHex = REVERSE(@stHex)
|
|
RETURN
|
|
GO
|
|
|
|
--
|
|
-- convert error code to winerror
|
|
--
|
|
CREATE PROCEDURE #Dec2Error
|
|
@iDec bigint,
|
|
@stHex nvarchar(8) OUTPUT,
|
|
@stError nvarchar (32) OUTPUT
|
|
AS
|
|
|
|
CREATE Table #CmdOutput
|
|
(
|
|
TEXT nvarchar(80)
|
|
)
|
|
|
|
EXEC #Dec2hex @stHex OUTPUT, @iDec
|
|
|
|
DECLARE @stCmdLine nvarchar(80)
|
|
SET @stCmdLine = "winerror"
|
|
|
|
DECLARE @bStatus bit
|
|
SET @bStatus = 0
|
|
|
|
IF @iDec < 0 AND @iDec > -1073741824
|
|
BEGIN
|
|
SET @bStatus = 1
|
|
SET @stCmdLine = @stCmdLine + " " + "-s"
|
|
END
|
|
SET @stCmdLine = @stCmdLine + " 0x" + @stHex
|
|
|
|
INSERT INTO #CmdOutput EXEC master.dbo.xp_cmdshell @stCmdLine
|
|
|
|
DECLARE @stText nvarchar (80)
|
|
|
|
DECLARE WinerrorCursor CURSOR FOR
|
|
SELECT TEXT FROM #CmdOutput
|
|
|
|
OPEN WinerrorCursor
|
|
FETCH NEXT FROM WinerrorCursor
|
|
INTO @stText
|
|
|
|
IF @@FETCH_STATUS = 0
|
|
BEGIN
|
|
SET @stText = LTRIM(@stText)
|
|
|
|
-- skip decimal value
|
|
DECLARE @iPos int, @iStart int
|
|
SET @iPos = CHARINDEX(" ", @stText, 0)
|
|
|
|
-- read in windows error text
|
|
SET @iStart = @iPos + 1
|
|
SET @iPos = CHARINDEX(" ", @stText, @iStart)
|
|
IF @bStatus = 0
|
|
SET @stError = SUBSTRING(@stText, @iStart, @iPos - @iStart)
|
|
|
|
-- skip '<-->'
|
|
SET @iStart = @iPos + 1
|
|
SET @iPos = CHARINDEX(" ", @stText, @iStart)
|
|
|
|
-- skip hex value
|
|
SET @iStart = @iPos + 1
|
|
SET @iPos = CHARINDEX(" ", @stText, @iStart)
|
|
|
|
-- read in ntstatus
|
|
SET @iStart = @iPos + 1
|
|
SET @iPos = LEN(@stText)
|
|
IF @bStatus = 1
|
|
SET @stError = SUBSTRING(@stText, @iStart, @iPos - @iStart + 1)
|
|
|
|
IF @stError = "No"
|
|
SET @stError = @stHex
|
|
END
|
|
GO
|