Выберите Case / Обновить одно поле на основе другого - PullRequest
2 голосов
/ 07 мая 2019

По сути, я пытаюсь очистить базу данных, и все пути к файлам указывают на образцы документов.Я читаю из одного столбца (расширение), а затем обновляю другой столбец (имя файла) и вносить изменения в зависимости от расширения.Я тоже хочу поймать все.Например, если расширение - DOC, тогда создайте путь "sample.doc";если расширение - PDF, то укажите путь «sample.pdf», если он неизвестен, а затем укажите путь «sample.txt».

У меня работает этот код, но думаю, что он будет лучше обслуживаться с помощьюцикл select / case:

select * from dbo.tsrecelec
UPDATE dbo.TSRECELEC
SET dbo.tsrecelec.reSID = '00+SampleWord.doc'
WHERE dbo.tsrecelec.reExtension = 'DOC'
UPDATE dbo.TSRECELEC
SET dbo.tsrecelec.reSID = '00+SampleWord.docx'
WHERE dbo.tsrecelec.reExtension = 'DOCX'
UPDATE dbo.TSRECELEC
SET dbo.tsrecelec.reSID = '00+SampleADOBE.pdf'
WHERE dbo.tsrecelec.reExtension = 'PDF'

В моем мозгу NONE SQL я думал, что что-то подобное может сработать?

SELECT reSID, reExtension,
    CASE
        WHEN reExtension = 'DOC' THEN  SET reSID = '00+SampleWord.doc'
        WHEN dbo.tsrecelec.reExtension = 'DOCX' THEN SET             dbo.tsrecelec.reSID = '00+SampleWord.docx'
        ELSE dbo.tsrecelec.reSID = '00+SampleFile.txt'
END
FROM dbo.tsrecelec;

Любая помощь приветствуется!

Ответы [ 2 ]

0 голосов
/ 07 мая 2019

Попробуйте использовать CASE...WHEN...THEN....Это более производительно, если вы получаете больше расширений в будущем:

UPDATE yourtable
    SET col1 = (CASE WHEN col2 = 'extension you want'
                      THEN 'nameofyourfile.extension'
                      WHEN ...
                      THEN ...
                 END)
    WHERE col2 IN ('extension1', 'extension2', 'extension3','...');
0 голосов
/ 07 мая 2019

Три обновления в порядке, но вы можете сформулировать это как:

UPDATE dbo.TSRECELEC
    SET reSID = (CASE WHEN reExtension = 'DOC'
                      THEN '00+SampleWord.doc'
                      WHEN reExtension = 'DOCX'
                      THEN '00+SampleWord.docx'
                      WHEN reExtension = 'PDF'
                      THEN '00+SampleADOBE.pdf'
                 END)
    WHERE reExtension IN ('DOC', 'DOCX, 'PDF');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...