2011-12-19 92 views
1

我爲我的Primarykey列生成一個字符串類似的標識函數。但其行爲是意想不到的。 它通過字符串去除全部0並僅存儲單個字符。糾正我我在哪裏錯了..通過UDFunction生成唯一字符串

Alter FUNCTION [dbo].[UDF_GenerateBatchNumber] (@BatchNumber as Varchar(10)) 
Returns Varchar 
AS 
BEGIN 
    -- Declare the return variable here 

    -- Add the T-SQL statements to compute the return value here 
    Select Top(1) @BatchNumber=[BatchNo] From TBL_iBATCH Order by [BatchNo] desc 
    IF @BatchNumber is Null 
     BEGIN 
     Set @BatchNumber ='B000001' 
     END 
    Else 
     BEGIN 
      Set @BatchNumber='B'+Convert(Varchar(7),(Cast(SUBSTRING(@BatchNumber,2,7) as Integer)+1)) 
     END 

    RETURN @BatchNumber 

END 
+1

你不想去2,6?而不是2,7?長度是7與b 6沒有 – xQbert 2011-12-19 12:25:10

+0

爲什麼它刪除領導0的 – joshua 2011-12-19 12:33:25

回答

3

通常的方法是使用您的IDENTITY列有一個計算列。
這UDF 失敗負載下,給2個鍵相同

ALTER TABLE TBL_iBATCH 
    ADD BatchNumber AS CAST('B' + RIGHT('000000' + CAST(MyIDCol AS varchar(6)), 6) AS char(7)) PERSISTED; 

ALTER TABLE TBL_iBATCHWITH CHECK 
    ADD CONSTRAINT PK_TBL_iBATCH PRIMARY KEY (BatchNumber); 
+0

ITs給B1而不是B000001 – joshua 2011-12-19 12:48:11

+1

@Madhav:啊是的,應該是varchar ,不是字符。已更新回答 – gbn 2011-12-19 12:52:51

+0

Thanks It Worked .... – joshua 2011-12-19 12:56:15

2

假定batchnumber是一個固定的長度。更改子(@ BatchNumber,2,7)爲整... 到

@BatchNumber='B'+Convert(Varchar(7),(Cast(SUBSTRING(@BatchNumber,2,6) as Integer)+1)) 

原因:你的子串試圖抓住一個空位置7時,不存在一個;該值將爲空,因此只有B將被列爲輸出。

+0

仍然是相同的o/p。你能澄清這是否像發生。對於第二個查詢時,鑄造是發生000001轉換爲整數。是否它像000001 + 1或1 + 1 – joshua 2011-12-19 12:32:47

相關問題