Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2010, 23:00   #1
Veiron
Форумчанин
 
Аватар для Veiron
 
Регистрация: 01.12.2007
Сообщений: 346
По умолчанию SQL запрос с условием

Здравствуйте!

Что я хотел:
Если пользователь уже есть, тогда значение обновляется, а если нет, тогда вставляется новая строка, попытался реализовать как показано ниже, но безуспешно, может подскажите как сделать лучше или немного меня поправите?

Код:
IF (SELECT [User] FROM [LaserpriborContest].[dbo].[Ratings] WHERE [User] = '100') THEN
BEGIN
    UPDATE [Contest].[dbo].[Ratings]
        SET [StoryID] = 3
            ,[Value] = 5
        WHERE [User] = '100'
    GO
END
ELSE
BEGIN
    INSERT INTO [Contest].[dbo].[Ratings]
        ([StoryID]
        ,[Value]
        ,[User])
    VALUES
        (3
        ,5
        ,'100')
    GO
END
Win 10 x64 | VS 2015 | MSSQL 2014
autovestitv.ru
Veiron вне форума Ответить с цитированием
Старый 30.03.2010, 06:37   #2
edgy
Форумчанин
 
Регистрация: 15.06.2008
Сообщений: 271
По умолчанию

Если Вы используете SQL Server (а похоже, что это он и есть), то:

1) Нужно добавить ключевое слово EXISTS, которое возвращает true или false в зависимости от того, существуют ли данные, которые соответствуют критериям, заданным в запросе.

2) THEN вроде как бы здесь и не нужен. По-крайней мере, в запросах с IF я его никогда не использовал.

Таким образом, запрос можно переписать следующим образом:

Код:
IF EXISTS (SELECT [User] FROM [LaserpriborContest].[dbo].[Ratings] WHERE [User] = '100')
BEGIN
    UPDATE [Contest].[dbo].[Ratings]
        SET [StoryID] = 3,
            [Value] = 5
      WHERE [User] = '100'
END
ELSE
BEGIN
    INSERT INTO [Contest].[dbo].[Ratings]
        ([StoryID],
         [Value],
         [User])
    VALUES
        (3,
         5,
         '100')
END
edgy вне форума Ответить с цитированием
Старый 30.03.2010, 12:21   #3
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

отмечу еще одну странность
ищите юзера в одной таблице LaserpriborContest, а изменяете инфу о юзере в другой таблице Contest - так и задумано?
soleil@mmc вне форума Ответить с цитированием
Старый 30.03.2010, 12:42   #4
edgy
Форумчанин
 
Регистрация: 15.06.2008
Сообщений: 271
По умолчанию

"LaserpriborContest" и "Contest" - в данном случае это различные базы данных, а не таблицы. А вот "Ratings" - это таблица, которая имеется и в "LaserpriborContest" и в "Contest".

Ну а так, да, получается, что поиск пользователя ведется в одной БД, а update c insert в другой БД. Но, видимо, в этом есть какой-то смысл. Надеюсь, что автор топика раскроет его.
edgy вне форума Ответить с цитированием
Старый 30.03.2010, 19:58   #5
Veiron
Форумчанин
 
Аватар для Veiron
 
Регистрация: 01.12.2007
Сообщений: 346
По умолчанию

Большое Спасибо! Так скрипт работает.
Таблицы различаются по тому, что хотел уменьшить визуальный шум скрипта. =)
Win 10 x64 | VS 2015 | MSSQL 2014
autovestitv.ru
Veiron вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос с условием отбора [Введите фамилию] spets Microsoft Office Access 9 21.01.2014 02:02
Создание новых таблиц в MS SQL SERVERE через SQL запрос в Delphi S_Yevgeniy Помощь студентам 1 27.10.2009 06:26
Запрос на удаление с условием Dimok82 SQL, базы данных 1 13.03.2009 18:19
SQL запрос на основе другого SQL запрса... Timoxa БД в Delphi 1 07.01.2007 18:15