这是我的逻辑。
我有一个文章表和一个匹配的图像表。图像以二进制格式存储。每个图像表每个图像有2个实例,这是因为我有2个尺寸。 300 x 200和500 x 400,其行由ImageSize分隔
我想编写一个存储过程来检查ImageSize = 3是否可用,如果没有,则从ImageSize = 2中检索。
如何设置存储过程来执行此操作?
由于
答案 0 :(得分:5)
您可以使用简单的top 1
找到尺寸最大的图片:
create procedure dbo.GetImage(
@ImageName varchar(50))
as
select top 1 image
from ImageTable
where ImageName = @ImageName
order by
ImageSize desc
答案 1 :(得分:2)
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
这基本上做同样的事情 - 但即使您突然还有图像大小代码为4,5等,它仍会继续返回Image
ImageSize = 3
。