2010-07-18 124 views
1

這是我的邏輯。需要SQL 2000存儲過程幫助

我有一個文章表和一個匹配的圖片表。圖像以二進制格式存儲。每個圖像表有兩個實例的每個圖像,這是因爲我有2個尺寸。 300 x 200和500 x 400以及它們的行由ImageSize分隔

我想編寫一個存儲過程,檢查ImageSize = 3是否可用,如果沒有,則從ImageSize = 2中檢索。

如何設置我的存儲過程來執行此操作?

感謝

+1

在你的問題中包含你的表格結構。 – JohnFx 2010-07-18 15:28:06

回答

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

+0

@TOm:我不喜歡這樣的事實,即如果引入其他值(如ImageSize = 4),Andomar的解決方案將失敗。這就是爲什麼我喜歡在我的意圖中更具體和更清晰。優雅是偉大的 - 但「它的作品」(在所有情況下)對我來說更重要。 – 2010-07-18 20:48:27

+0

如果是這樣的話,那麼您肯定會使用Andomar的解決方案,在WHERE子句中添加「AND ImageSize BETWEEN 2和3」? – Tom 2010-07-18 21:11:39

+0

@Tom:這可能是一種可能性,是的。 – 2010-07-18 21:18:11

5

你可以找到一個簡單的top 1最高大小的圖片:

create procedure dbo.GetImage(
    @ImageName varchar(50)) 
as 
select top 1 image 
from ImageTable 
where ImageName = @ImageName 
order by 
     ImageSize desc 
+0

動態sql通常很糟糕 - 聽起來像現在沒有必要這樣做。 – 2010-07-18 15:22:34

+2

這不是動態sql,只是使用參數的sql語句(在過程中)。 – 2010-07-18 15:34:57