次のシナリオ: このようなコードをインクリメントする必要があるため、DS0000001
次の項目はDS0000002
、次DS0000003
のようになります。
したがって、大きな INSERT ステートメントでこのコードを生成するために、次の関数を作成しました。
CREATE FUNCTION dbo.eufn_e5_importCRM_getNextClientCode(
@partnerCode AS NVARCHAR(10),
@number AS INT
)
RETURNS NVARCHAR(20)
AS
BEGIN
DECLARE @next AS INT
DECLARE @zeroes AS NVARCHAR(10)
DECLARE @nextStr AS NVARCHAR(10)
DECLARE @return AS NVARCHAR(20)
DECLARE @partnerPrefix AS NVARCHAR(10)
SELECT @next = RIGHT(c.clientCode,7) FROM Clients c
SELECT @partnerPrefix = partners.partnerPrefix
FROM partners WHERE partnerCode = @partnerCode
SET @next = ISNULL(@next,0) + @number
SET @nextStr = CONVERT(NVARCHAR(10),@next)
SELECT @zeroes = CASE WHEN @next > 9 THEN '00000'
WHEN @next > 99 THEN '0000'
WHEN @next > 999 THEN '000'
WHEN @next > 9999 THEN '00'
WHEN @next > 99999 THEN '0'
WHEN @next > 999999 THEN ''
ELSE '000000'
END
IF ISNULL(@next,'') = ''
BEGIN
SET @return = @partnerPrefix + @zeroes + '1'
END
ELSE SET @return = @partnerPrefix + @zeroes + @nextStr
RETURN @return
END
@number
-関数を使用して手動で挿入ステートメントに追加した行番号を取得しROW_NUMBER()
ます。
これはすでに正常に機能しています。正しいコードがテーブルに挿入されます。
コードで気に入らないのは、次の部分です。
SELECT @zeroes = CASE WHEN @next > 9 THEN '00000'
WHEN @next > 99 THEN '0000'
WHEN @next > 999 THEN '000'
WHEN @next > 9999 THEN '00'
WHEN @next > 99999 THEN '0'
WHEN @next > 999999 THEN ''
ELSE '000000'
END
私はすでにstackoverflowでしばらく検索し、グーグルでも検索しましたが、「0」をそのままにしておくconvertのような関数は見つかりませんでした。
この機能をより柔軟にし、可能であれば再利用可能にする方法はありますか?
助けてくれてありがとう!