Нужна помощь с хранимой процедурой SQL 2000 - PullRequest
1 голос
/ 18 июля 2010

Это моя логика.

У меня есть таблица статей и соответствующие таблицы изображений. Изображения хранятся в двоичном формате. Каждая таблица изображений имеет 2 экземпляра каждого изображения, потому что у меня есть 2 размера. 300 x 200 и 500 x 400 с их рядами, разделенными ImageSize

Я хочу написать хранимую процедуру, которая проверяет, доступен ли ImageSize = 3, а если нет, то извлечь из ImageSize = 2.

Как мне настроить мою хранимую процедуру для этого?

Спасибо

Ответы [ 2 ]

5 голосов
/ 18 июля 2010

Вы можете найти изображение наивысшего размера с помощью простого top 1:

create procedure dbo.GetImage(
    @ImageName varchar(50))
as
select  top 1 image
from    ImageTable
where   ImageName = @ImageName
order by
        ImageSize desc
2 голосов
/ 18 июля 2010

Ответ Andomar полностью действителен и очень элегантен - если вы хотите что-то более «приземлённое», учитывающее, что в будущем возможны другие числовые значения, попробуйте следующее:

CREATE PROCEDURE dbo.FetchImage(@ImageName VARCHAR(255))
AS
   IF EXISTS(SELECT * FROM dbo.ImageTable
             WHERE ImageName = @ImageName AND ImageSize = 3)
      SELECT
          Image
      FROM
          dbo.ImageTable
      WHERE
          ImageName = @ImageName AND ImageSize = 3
   ELSE
      SELECT
          Image
      FROM
          dbo.ImageTable
      WHERE
          ImageName = @ImageName AND ImageSize = 2

Это, в основном, делает то же самое - но оно будет продолжать возвращать Image для ImageSize = 3, даже если у вас неожиданно появятся коды размеров изображения 4, 5 и т. Д.

...