ASK sql подстрока для версии значения - PullRequest
0 голосов
/ 21 февраля 2012

у меня был запрос на обновление версии моего значения, здесь код

DECLARE @inParam AS VARCHAR(50) = '80003689_CST_20120118'
DECLARE @file_extension varchar(50)='.xlsx'
DECLARE @lastVer AS VARCHAR(50)
DECLARE @nextVer AS INT 
DECLARE @combine AS VARCHAR(50) 

SELECT @lastVer = MAX([File_Name]) 
  FROM dbo.Uploaded_File 
 WHERE [File_Name] LIKE @inParam+'%'

SELECT @nextVer = CAST(SUBSTRING(@lastVer,LEN(@inParam) + 6, 1) AS INT) + 1

SELECT @combine = @inParam + '(' + CONVERT(VARCHAR, @nextVer) + ')' + @file_extension

SELECT @lastVer, @nextVer, @combine

проблема в том, что когда значение 80003689_CST_20120118(1) не обновило версию, результат у меня был 80003689_CST_20120118(1)(1)...

но я хотел, чтобы результат стал 80003689_CST_20120118(2).

, поэтому, если бы у меня было то же значение, оно станет:

80003689_CST_20120118
80003689_CST_20120118(1)
80003689_CST_20120118(2)

и т. Д.

Отвечено @Dimitri .. но я не могу отметить его ответ .. его страница ошибки givin на мне ... спасибо dimitri

Ответы [ 2 ]

4 голосов
/ 21 февраля 2012

Я думаю, что это работает сейчас:

DECLARE @inParam AS VARCHAR(50) = '80003689_CST_20120118'
declare @file_extension varchar(50)='.xlsx'
DECLARE @lastVer AS VARCHAR(50)
DECLARE @nextVer AS INT 
DECLARE @combine AS VARCHAR(50) 

SELECT @lastVer = MAX(CAST(SUBSTRING([File_Name], LEN(@inParam)+2, LEN([File_Name]) - LEN(@inParam) - 2) AS INT))
FROM dbo.Uploaded_File 
WHERE [File_Name] LIKE @inParam+'(%)'

SELECT @nextVer = ISNULL(@lastVer, 0) + 1
SELECT @combine =  @inParam + '(' + CONVERT(VARCHAR, @nextVer) + ')' + @file_extension
SELECT @lastVer,@nextVer,@combine
1 голос
/ 21 февраля 2012

Вот мой тестовый фрагмент (для него не требуется таблица БД). Можете ли вы обновить его, чтобы воспроизвести ошибку?

DECLARE @inParam AS VARCHAR(50) = '80003689_CST_20120118'
declare @file_extension varchar(50)='.xlsx'
DECLARE @lastVer AS VARCHAR(50)
DECLARE @nextVer AS INT 
DECLARE @combine AS VARCHAR(50) 

create table #Uploaded_File ( [File_Name] varchar(max) )
insert into #Uploaded_File values( @inParam + '(3)' )
insert into #Uploaded_File values( @inParam + '(22)' )
insert into #Uploaded_File values( @inParam + '(1)' )
insert into #Uploaded_File values( @inParam + '(50)' )

SELECT @lastVer = MAX(CAST(SUBSTRING([File_Name], LEN(@inParam)+2, LEN([File_Name]) - LEN(@inParam) - 2) AS INT))
FROM #Uploaded_File 
WHERE [File_Name] LIKE @inParam+'(%)'

SELECT @nextVer = ISNULL(@lastVer, 0) + 1
SELECT @combine =  @inParam + '(' + CONVERT(VARCHAR, @nextVer) + ')' + @file_extension
SELECT @lastVer,@nextVer,@combine

drop table #Uploaded_File
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...