Помогите с хранимой процедурой SQL - PullRequest
0 голосов
/ 21 декабря 2010

Мне нужна помощь с хранимой процедурой SQL, у меня нет большого опыта работы с ней. У меня есть таблица "dbo.Lookup_Country". Содержит 3 поля: ID, Имя, Код. Теперь я написал хранимую процедуру, которая получает название страны по коду.

Select Name from Lookup_Country where Code = @Code

Мне нужно настроить хранимую процедуру так, чтобы при наличии 0 результатов она проверяла результаты с помощью идентификатора:

Выберите имя из Lookup_Country, где Id = @ Code

Так что в основном мне нужна какая-то структура 'IF':

if (Select Name from Lookup_Country where Code = @Code) == 0 results
      Select Name from Lookup_Country where Id = @Code

Возможно ли это?

ТНХ

Спасибо за помощь всем, я использовал это:

DECLARE @Name nvarchar(50)

-- Insert statements for procedure here
SET @Name = (SELECT Name from dbo.Lookup_Country WHERE Code = @CODE)
IF @Name != ''
    SELECT Name from dbo.Lookup_Country WHERE Code = @CODE
ELSE
    SELECT Name from dbo.Lookup_Country WHERE ID = @CODE

Ответы [ 4 ]

4 голосов
/ 21 декабря 2010

Нет действительно элегантного способа для этого ...

SELECT Name 
INTO #foo
from Lookup_Country where Code = @Code
IF @@ROWCOUNT <> 0
   SELECT Name  FROM #foo
ELSE
   Select Name from Lookup_Country where Id = @Code

Используете ли вы переменную таблицы или число, это не имеет значения

Или у вас есть эта конструкция, возможно, с совокупностью

SELECT TOP 1
    Name
FROM
    (
    Select Name, 0 AS Precedence from Lookup_Country where Code = @Code
    UNION ALL
    Select Name, 1 AS Precedence from Lookup_Country where Id = @Code
    ) foo
ORDER BY
    Precedence 

Если вы включите приоритет в вывод, у вас есть информация о как было найдено ...

2 голосов
/ 21 декабря 2010

Поместите результаты первого выбора в переменную, затем вы можете подсчитать этот результат, а если он равен нулю, вы будете выполнять поиск по идентификатору.

Чтобы узнать больше о том, какиспользуйте оператор if, а затем ознакомьтесь с этой статьей, если вы используете SQL Server, но если вы используете другую базу данных, то логика все равно применяет синтаксис if, который может отличаться.

http://msdn.microsoft.com/en-us/library/ms182587.aspx

0 голосов
/ 21 декабря 2010

Вы, вероятно, можете просто использовать or:

Select Name from Lookup_Country where Code = @Code or Id = @Code
0 голосов
/ 21 декабря 2010

Вам это помогает?

 Select Name from Lookup_Country where (Code = @Code OR Id = @Code)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...