10 精币
[SQL] 纯文本查看 复制代码
USE [Character_A6]
GO
/****** Object: UserDefinedFunction [dbo].[FN_GetSerialNumber] Script Date: 01/28/2013 01:22:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/******************************************************************************
이 름 : FN_GetSerialNumber
설 명 : 시리얼일련번호를 입력받아서 아이템시리얼번호를 반환한다.
예 제 : select dbo.FN_GetSerialNumber(1) --//반환값 : 0x23E52D6C000800000000000100001E32
수정내역:
Ver Date Author Description
--------- ---------- --------------- -----------------------------------
1.0 2006-02-22 Han Ji Wook 1. 초기생성
1.1 2009-12-22 Park Chanik 1. 2010년 에러 관련 변경
******************************************************************************/
ALTER FUNCTION [dbo].[FN_GetSerialNumber]
(
@i_GetDate DATETIME,
@i_wLinear INT,
@i_dwRandom INT
) RETURNS VARBINARY(16)
AS
BEGIN
DECLARE @v_serial_Number BINARY(16) --// 시리얼번호
DECLARE @v_serialDate VARCHAR(20) --// 아이템생성시간 (Varchar)
DECLARE @v_serialInt INT --// 아이템생성시간 (Integer)
DECLARE @v_wClass BINARY(2) --// 아이템생성타입 (DB : 07)
DECLARE @v_wServer BINARY(2) --// 서버코드 (DB : 00)
DECLARE @v_wMap BINARY(2) --// 맵코드 (DB : 00)
DECLARE @v_wLinear BINARY(2) --// 일련번호
DECLARE @v_dwRandom BINARY(4) --// 랜덤코드
--// DB Hard Coding
SELECT @v_wClass = 0x0008
SELECT @v_wServer = 0x0000
SELECT @v_wMap = 0x0000
--// DB Hard Coding End
SELECT @v_wLinear = CAST(@i_wLinear AS BINARY(2))
SELECT @v_dwRandom = CAST(@i_dwRandom AS BINARY(4))
SELECT @v_serialDate = REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(20), @i_GetDate, 120),'-',''),':',''),' ','')
-- 2009년 12월 22일 변경
-- SUBSTRING(@v_serialDate,4,1) * 100000000 ---> SUBSTRING(@v_serialDate,3,2) * 100000000
SELECT @v_serialInt = CAST(SUBSTRING(@v_serialDate,3,2) AS BIGINT) * 100000000
+ CAST(SUBSTRING(@v_serialDate,5,2) AS INT) * 1000000
+ CAST(SUBSTRING(@v_serialDate,7,2) AS INT) * 10000
+ CAST(SUBSTRING(@v_serialDate,9,2) AS INT) * 100
+ CAST(SUBSTRING(@v_serialDate,11,2) AS INT)
SELECT @v_serial_Number = CAST(@v_serialInt AS BINARY(4)) + @v_wClass + @v_wServer + @v_wMap + @v_wLinear + @v_dwRandom
IF DATALENGTH(@v_serial_Number) <> 16
BEGIN
SELECT @v_serial_Number = 0x00000000000000000000000000000000
END
RETURN @v_serial_Number
END
执行这个代码执行不了,大神帮忙查看下!
[SQL] 纯文本查看 复制代码
INSERT USER_POSTBOX VALUES ('A23020540000000002','','[GM]装备发放',0,'请注意查收:初级强化石','物品发送请注意查收,有效期90天',0,1,0,9901,dbo.FN_GetSerialNumber(getdate(),1,),0x,0,0,getdate(),getdate()+90,null,null,null)
最佳答案
查看完整内容
INSERT INTO USER_POSTBOX VALUES ('A23020540000000002','','[GM]装备发放',0,'请注意查收:初级强化石','物品发送请注意查收,有效期90天',0,1,0,9901,dbo.FN_GetSerialNumber(getdate(),1,),0x,0,0,getdate(),getdate()+90,null,null,null)