获取布尔值

时间:2012-07-06 05:18:37

标签: sql-server sql-server-2008-r2

我有两张桌子:

1)BlogAlbum:

Id  AlbumName   CoverPhoto          CreatedDate                    Description     
1   Onam        noImage.jpg     2012-07-05 10:54:46.977            Onam is an ancient festival which still survives in modern times. Kerala's rice harvest festival and the Festival of Rain Flowers, which fall on the Malayalam month of Chingam, celebrates the Asura King Mahabali's annual visit from Patala (the underworld). Onam is unique since Mahabali has been revered by the people of Kerala since prehistory.    According to the legend, Kerala witnessed its golden era during the reign of King Mahabali. The Brahma-Vaivarta Puranam explains that Lord Vishnu wante     
2   Birds       noImage.jpg     2012-07-05 11:02:48.667         
3   Nature    gold-fish.jpg     2012-07-05 11:03:36.503

2。 BlogPhoto:

    Id  AlbumId PhotoName                  AddedDate            
    29  1   Photo0364.jpg      2012-07-05 11:01:18.270          
    30  1   Photo0380.jpg      2012-07-05 11:01:35.723         
    31  1   Photo0404.jpg      2012-07-05 11:01:47.717          
    32  1   Photo0404.jpg      2012-07-05 11:02:34.457          
    33  2   f.jpg              2012-07-05 11:03:03.300          
    34  2   g.jpg              2012-07-05 11:03:12.917         
    35  3   image005.jpg       2012-07-05 11:03:45.367          
    36  3   1.jpg              2012-07-05 11:03:57.837          
    37  3   2.jpg              2012-07-05 11:04:05.580          
    38  3   na.jpg             2012-07-05 11:04:17.337          
    39  3   gold-fish.jpg      2012-07-05 11:06:29.453

我编写了一个存储过程来列出BlogPhoto的详细信息:

ALTER PROCEDURE [dbo].[BlogPhotoDetailsById]
    (
        @Id int
    )
    AS
    BEGIN
        SELECT [HRM_BlogPhoto].[Id] 
              ,[HRM_BlogPhoto].[AlbumId] 
              ,[HRM_BlogPhoto].[PhotoName] 
              ,[HRM_BlogPhoto].[AddedDate] 
              ,[HRM_BlogPhoto].[Title] 
              ,[HRM_BlogPhoto].[ModifiedDate]
          FROM [HRM_BlogPhoto] 
        WHERE [HRM_BlogPhoto].[Id] = @Id 

    END

我想要的是,如果BlogPhoto.PhotoName等于BlogAlbum.CoverPhoto,那么在上面的storedprocedure中我需要显示“true”,如果不是,我需要显示“false”。

我如何修改上述存储过程?

1 个答案:

答案 0 :(得分:1)

下面将显示BlogPhoto是否是至少一个BlogAlbum的CoverPhoto(注意照片可以在多个相册中)

<德尔>        ALTER PROCEDURE [dbo]。[BlogPhotoDetailsById]         (             @Id int         )         如         开始             SELECT [HRM_BlogPhoto]。[Id]                   [HRM_BlogPhoto]。[ALBUMID]                   [HRM_BlogPhoto]。[PhotoName]                   [HRM_BlogPhoto]。[AddedDate]                   [HRM_BlogPhoto]。[标题]                   [HRM_BlogPhoto]。[ModifiedDate]                   ,例如,存在                     (SELECT * FROM [blogalbum]                      WHERE [blogalbum] .CoverPhoto = [HRM_BlogPhoto]。[PhotoName]                      )                      那么'真'                      ELSE'false'                    结束为[IsCoverPhoto]               来自[HRM_BlogPhoto]             在哪里[HRM_BlogPhoto]。[Id] = @Id

修改

Bennor的观点被采纳了。下面将避免嵌套循环,虽然注意因为重复封面照片的潜力,您需要添加distinct关键字。

ALTER PROCEDURE [dbo].[BlogPhotoDetailsById]
(
    @Id int
)
AS
BEGIN
    SELECT DISTINCT 
          [HRM_BlogPhoto].[Id]
          ,[HRM_BlogPhoto].[AlbumId] 
          ,[HRM_BlogPhoto].[PhotoName] 
          ,[HRM_BlogPhoto].[AddedDate] 
          ,[HRM_BlogPhoto].[Title] 
          ,[HRM_BlogPhoto].[ModifiedDate]
          ,CASE WHEN [blogalbum].CoverPhoto IS NOT NULL
             THEN 'true' 
             ELSE 'false' 
           END AS [IsCoverPhoto]
      FROM [HRM_BlogPhoto] 
            LEFT OUTER JOIN [blogalbum]
            ON [blogalbum].CoverPhoto = [HRM_BlogPhoto].[PhotoName]
    WHERE [HRM_BlogPhoto].[Id] = @Id     

一个警告 - 出于性能原因,如果采用这种方法,你应该确保在[blogalbum] .CoverPhoto上有一个索引。