这是我的逻辑。需要SQL 2000存储过程帮助
我有一个文章表和一个匹配的图片表。图像以二进制格式存储。每个图像表有两个实例的每个图像,这是因为我有2个尺寸。 300 x 200和500 x 400以及它们的行由ImageSize分隔
我想编写一个存储过程,检查ImageSize = 3是否可用,如果没有,则从ImageSize = 2中检索。
如何设置我的存储过程来执行此操作?
感谢
这是我的逻辑。需要SQL 2000存储过程帮助
我有一个文章表和一个匹配的图片表。图像以二进制格式存储。每个图像表有两个实例的每个图像,这是因为我有2个尺寸。 300 x 200和500 x 400以及它们的行由ImageSize分隔
我想编写一个存储过程,检查ImageSize = 3是否可用,如果没有,则从ImageSize = 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
。
@TOm:我不喜欢这样的事实,即如果引入其他值(如ImageSize = 4),Andomar的解决方案将失败。这就是为什么我喜欢在我的意图中更具体和更清晰。优雅是伟大的 - 但“它的作品”(在所有情况下)对我来说更重要。 – 2010-07-18 20:48:27
如果是这样的话,那么您肯定会使用Andomar的解决方案,在WHERE子句中添加“AND ImageSize BETWEEN 2和3”? – Tom 2010-07-18 21:11:39
@Tom:这可能是一种可能性,是的。 – 2010-07-18 21:18:11
你可以找到一个简单的top 1
最高大小的图片:
create procedure dbo.GetImage(
@ImageName varchar(50))
as
select top 1 image
from ImageTable
where ImageName = @ImageName
order by
ImageSize desc
动态sql通常很糟糕 - 听起来像现在没有必要这样做。 – 2010-07-18 15:22:34
这不是动态sql,只是使用参数的sql语句(在过程中)。 – 2010-07-18 15:34:57
在你的问题中包含你的表格结构。 – JohnFx 2010-07-18 15:28:06