表A 有兩列:[編號] [nvarchar](16) NULL, [用車日期] [date] NULL
想在[編號]列根據[用車日期]列按每天遞增生成流水號,格式:PG-YYYYMMdd-0001,存盤程序代碼如下:除錯時提示:從字串轉換日期和/或時間時,轉換失敗。請大神把把脈,該怎么改!
-- =============================================
-- Author: <**>
-- Create date: <2021-05-14>
-- Description: <自動生成流水碼,前綴+日期+流水碼,如PG-20210320-0001>
--按某列的日期,按年、月、日分別生成流水碼
-- 日期模式: 0 年月日 e.g.:20210424
-- 1 年月 e.g.:202104
-- 2 年 e.g.:2021
-- =============================================
ALTER PROCEDURE [dbo].[GetNoByColname] (
@prefix varchar(10), --前綴字母
@mode int, --日期模式
@coltext datetime, --日期列的值,以傳入的日期型別的值,而不是以getdate()生成編號
@nolen varchar(10), --流水號長度
@listna varchar(20), --流水單號對應的列名,建議索引
@tablena varchar(20),--表名
@runningnum varchar(20) output)--生成流水碼
AS
BEGIN
SET NOCOUNT ON;
declare @sql nvarchar(500)
declare @num int
if (@mode=0)
begin
--查詢表獲取指定日期最大流水號陳述句,當日期模式為年月日
set @sql = 'select isnull(max(convert(int,substring('+@listna+',len('+@listna+')-'+@nolen+'+1,'+@nolen+'))),0)+1 from '+@tablena
+' where substring('+@listna+',len('+@listna+')-7-'+@nolen+',8)=replace(convert(varchar(8),"'+@coltext+'",112),"-")'
end
else if (@mode=1)
begin
--查詢表獲取指定日期最大流水號陳述句,當日期模式為年月
set @sql = 'select isnull(max(convert(int,substring('+@listna+',len('+@listna+')-'+@nolen+'+1,'+@nolen+'))),0)+1 from '+@tablena
+' where substring('+@listna+',len('+@listna+')-5-'+@nolen+',6)=replace(cconvert(varchar(100),'+@coltext+',112),"-")'
end
else
begin
--查詢表獲取指定日期最大流水號陳述句,當日期模式為年
set @sql = 'select isnull(max(convert(int,substring('+@listna+',len('+@listna+')-'+@nolen+'+1,'+@nolen+'))),0)+1 from '+@tablena
+' where substring('+@listna+',len('+@listna+')-3-'+@nolen+',4)=replace(cconvert(varchar(100),'+@coltext+',112),'-')'
end
--創建臨時表,獲取最大流水號值
create table #temp (Total int);
insert into #temp EXEC(@sql);
set @num = (Select Total FROM #temp)
if (@mode=0)
begin
--拼接流水號,當日期模式為年月日
set @runningnum = @prefix+'-'+CONVERT(varchar(100),@coltext,12)+'-'+replicate('0',@nolen-len(@num))+convert(varchar(20),@num)
end
else if (@mode=1)
begin
--拼接流水號,當日期模式為年月
set @runningnum = @prefix+'-'+CONVERT(varchar(4),@coltext,12)+'-'+replicate('0',@nolen-len(@num))+convert(varchar(20),@num)
end
else
begin
--拼接流水號,當日期模式為年
set @runningnum = @prefix+'-'+CONVERT(varchar(2),@coltext,12)+'-'+replicate('0',@nolen-len(@num))+convert(varchar(20),@num)
end
select @runningnum
END
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/284719.html
標籤:疑難問題