Как заменить текст в поле для набора данных на основе условия - SQL Server - PullRequest
2 голосов
/ 26 января 2012

Я пытаюсь преобразовать сообщения об ошибках, хранящиеся в таблице базы данных, в удобные для пользователя сообщения в отчете.

Я хочу иметь возможность заменить значение в поле на основе литерального текста в другом поле.

Текущий запрос возвращает набор данных с тремя столбцами FileName, FileContent, CurrentDate:

SELECT 
    Left(Filename,Len(Filename)-16) as 'FileName',
    FileContent,
    Right(left(Filename, Len(Filename) - 8), 8) as 'CurrentDate'
FROM ErrorLogs 
WHERE 
     FileContent like '%Error%'
     AND Right(left(Filename, Len(Filename) - 8), 8) = 
             Replace(convert(varchar(10), getdate(), 102), '.', '')
ORDER BY 
    filename asc

Например, если имя файла ExportFile, я хочу, чтобы FileContent читал There was an error with the export file, а если имя файла ImportFile, я хочу, чтобы FileContent читал соответственно.

Заранее благодарю за ответ ...

Ответы [ 2 ]

1 голос
/ 27 января 2012

Вам не нужны временные таблицы для этого.

SELECT 
    Left(Filename,Len(Filename)-16) as 'FileName',
    FileContent = CASE 
         WHEN Left(Filename,Len(Filename)-16) = 'ABC' THEN 'File is FUBAR'
         WHEN Left(Filename,Len(Filename)-16) = 'XYZ' THEN 'File is hosed'
         ELSE 'File is good!'
    END,
    Right(left(Filename, Len(Filename) - 8), 8) as 'CurrentDate'
FROM ErrorLogs 
WHERE 
     FileContent like '%Error%'
     AND Right(left(Filename, Len(Filename) - 8), 8) = 
             Replace(convert(varchar(10), getdate(), 102), '.', '')
ORDER BY 
    filename asc
0 голосов
/ 26 января 2012

Использование временной переменной связано с тем, что для оператора обновления не нужно снова возвращаться в базу данных для соединения.

create table #temp
(
 FileName varchar(15),
 FileContent varchar(1000),
 CurrentDate varchar(50),
)
Insert into #temp
SELECT Left(Filename,Len(Filename)-16) as 'FileName',FileContent ,
Right(left(Filename,Len(Filename)-8),8) as 'CurrentDate'
FROM ErrorLogs 
WHERE FileContent like '%Error%'
AND Right(left(Filename,Len(Filename)-8),8) = 
Replace(convert(varchar(10),getdate(),102),'.','')
ORDER BY filename asc

Update #temp
Set FileContent = CASE
    WHEN FileName = 'ExportFile' THEN 'There was an error with the export file'
    WHEN FileName = 'ImportFile' THEN 'There was an error with the import file'
    ELSE FileContent
  END
Select * from #temp
Drop table #temp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...