我有两张桌子:
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”。
我如何修改上述存储过程?
答案 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上有一个索引。