Заменить SQL-запрос - PullRequest
       11

Заменить SQL-запрос

1 голос
/ 22 июля 2011

Я хочу заменить этот запрос

DECLARE @tmpUser TABLE( UserId INT, UserType INT )

INSERT INTO @tmpUser
SELECT
    u.UserId,
    1
FROM
    Users u (nolock)
WHERE
    u.UPIN = @AttendingDoctorID

IF @@ROWCOUNT = 0
BEGIN
    INSERT INTO @tmpUser
    SELECT
        u.UserId,
        1
    FROM
        Users u (nolock)
    WHERE
        u.FirstName = @AttendingDoctorFirstName AND
        u.LastName = @AttendingDoctorLastName
END
SELECT * FROM @tmpUser

для одного оператора SQL SELECT без использования @tmpUser или любых других временных таблиц

Ответы [ 2 ]

3 голосов
/ 22 июля 2011

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

IF EXISTS(
    SELECT 
        1 
    FROM 
        Users u 
    WHERE 
        u.UPIN = @AttendingDoctorID)
BEGIN
    SELECT 
        u.UserId, 1 
    FROM 
        Users u  WITH(nolock)
    WHERE 
        u.UPIN = @AttendingDoctorID
END ELSE BEGIN
    SELECT
        u.UserId,
        1
    FROM
        Users u (nolock)
    WHERE
        u.FirstName = @AttendingDoctorFirstName AND
        u.LastName = @AttendingDoctorLastName
END
0 голосов
/ 22 июля 2011

Как насчет использования ИЛИ вместо двух отдельных запросов.

Я думаю, что это послужит цели.

SELECT
    u.UserId, 1
FROM
    Users u (nolock)
WHERE
    (u.UPIN = @AttendingDoctorID)
    OR
    (u.FirstName = @AttendingDoctorFirstName AND
    u.LastName = @AttendingDoctorLastName)
...