Как написать условие IFEXISTS и обновить запись из кода позади? - PullRequest
0 голосов
/ 01 августа 2011

Я хочу написать условие IFEXISTS и обновить запись из кода. Я не знаю, возможно ли это или нет ...

, если это возможно, тогда кто-нибудь, пожалуйста, сообщите мне синтаксис для этого..

Как обновить запись ..

Я хочу написать что-то вроде этого .. но что правильно?

public void UpdateModalitiesId(int? CaseId, int ModalitiesId)

    {
        string query = "if exists (select count(*) from ImageModality where ImageModality.Id='"+ ModalitiesId +"')
                               UPDATE ImageGroup set ImageModalityId='" + ModalitiesId + "' where BaseCaseId='" + CaseId +"' ;
        //string query = "UPDATE ImageGroup set ImageModalityId='" + ModalitiesId + "' where BaseCaseId='" + CaseId + "'";
        SqlHelper.ExecuteNonQuery(strConnectionString, CommandType.Text, query);
    }

Ответы [ 3 ]

2 голосов
/ 01 августа 2011

Во-первых, оператор select count (*) всегда будет возвращать хотя бы одну запись, поэтому ваше условие всегда будет возвращать TRUE.Таким образом, вам нужно условие типа

IF (Select count(*) FROM ...) > 0 

Далее, если вам нужно обновить запись, используя ваше условие, вы можете использовать оператор IF .. BEGIN .. END.Не обязательно использовать BEGIN .. END. Вы можете использовать UPDATE сразу после условия IF, но в будущем, если вы измените свой код, вы можете избежать логических ошибок.

Итак, ваш код будетбыть таким:

public void UpdateModalitiesId(int? CaseId, int ModalitiesId)

    {
        string query = "if (select count(*) from ImageModality where ImageModality.Id='"+ ModalitiesId +"') > 0 BEGIN
                               UPDATE ImageGroup set ImageModalityId='" + ModalitiesId + "' where BaseCaseId='" + CaseId +"; END' ;
        SqlHelper.ExecuteNonQuery(strConnectionString, CommandType.Text, query);
    }

РЕДАКТИРОВАТЬ: И правильный код

public void UpdateModalitiesId(int? CaseId, int ModalitiesId)

    {
        string query = "if EXISTS(select * from ImageModality where ImageModality.Id='"+ ModalitiesId +"') 0 BEGIN
                               UPDATE ImageGroup set ImageModalityId='" + ModalitiesId + "' where BaseCaseId='" + CaseId +"; END' ;
        SqlHelper.ExecuteNonQuery(strConnectionString, CommandType.Text, query);
    }
1 голос
/ 01 августа 2011

Лично я бы не стал сначала тестировать, а просто делать ОБНОВЛЕНИЕ

Выполнение обоих требует 2 прикосновений к столу для одного и того же SELECT..WHERE ...

Таким образом, UPDATE будет означать, что нулевые строки обновляются, если строк нет. А стол заправляется один раз

Также возможно, что строка вставляется после EXISTS, но до ОБНОВЛЕНИЯ при большой нагрузке.

0 голосов
/ 01 августа 2011

Вы можете проверить что-то в этих строках

IF EXISTS(SELECT count(*) from ImageModality where ImageModality.Id= ID > x)
BEGIN     
     UPDATE ImageGroup set ImageModalityId ....
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...