Sql server 2008 需要有关SQL Server 2008中存储过程的帮助吗
我有4张桌子: 表1Sql server 2008 需要有关SQL Server 2008中存储过程的帮助吗,sql-server-2008,Sql Server 2008,我有4张桌子: 表1 ContentID(pk) ContentGUID Description SiteID CategoryID StartDate DisplayName ParentId AssignedAuthors AssignedEditors CreatedBy U.UserName Created ModifiedBy UserName Modified Priority 表2 ContentID(fk) versionid(pk) page 表3 apprhistroyi
ContentID(pk)
ContentGUID
Description
SiteID
CategoryID
StartDate
DisplayName
ParentId
AssignedAuthors
AssignedEditors
CreatedBy
U.UserName
Created
ModifiedBy
UserName
Modified
Priority
表2
ContentID(fk)
versionid(pk)
page
表3
apprhistroyid(pk)
verstionid(fk)
approvalstatusid(fk)
表4
approvalstatusid(pk)
statusname
我想要表1和表4的全部细节。我尝试了以下程序:
ALTER PROCEDURE [dbo].[DEV_SiteAdmin_Menu_GetItem_ALL_TEMP]
@SiteID Int
AS
DECLARE @VersionID int, @ApprovalStatusID int,@StatusName nvarchar(max),@ContentID Int,@Rowcount int
DECLARE @TEMP INT
--set @ApprovalStatusID=5;
--set @StatusName ='New';
set @Rowcount=(select max(ContentID)from dev_content where SiteID=@SiteID)
set @ContentID=(select min(ContentID) from dev_content where SiteID=@SiteID)
SET @TEMP=@ContentID
IF(@Rowcount>=1)
BEGIN
WHILE @Rowcount>1
BEGIN
SET @Rowcount=@Rowcount-1
set @ApprovalStatusID=
CASE
WHEN exists (SELECT VersionID from DEV_ContentVersion WHERE ContentID=@TEMP)
THEN (SELECT ApprovalStatusID FROM DEV_ApprovalStatus WHERE ApprovalStatusID=(SELECT ApprovalStatusID FROM DEV_ApprovalHistory WHERE VersionID=(SELECT VersionID from DEV_ContentVersion WHERE ContentID=(select ContentID from dev_content where ContentID=@ContentID and SiteID=@SiteID)))) else 5 end
set @StatusName=
case
when (@ApprovalStatusID != 5)
then
(SELECT StatusName FROM DEV_ApprovalStatus WHERE ApprovalStatusID=@ApprovalStatusID)
else
'New'
end
SELECT DISTINCT [ContentID]
,[ContentGUID]
,[Description]
,[SiteID]
,[CategoryID]
,[StartDate]
,[DisplayName]
,[ParentId]
,[AssignedAuthors]
,[AssignedEditors]
,[CreatedBy]
,U.UserName 'CreatedUser'
,dbo.fnGetUserNamesFromUserIds([AssignedAuthors],',') 'Authors'
,dbo.fnGetUserNamesFromUserIds([AssignedEditors],',') 'Editors'
,[Created]
,[ModifiedBy]
,U1.UserName 'ModifiedUser'
,[Modified]
,[Priority]
,@ApprovalStatusID [ApprovalStatusID]
,@StatusName [StatusName]
FROM [DEV_Content] C
INNER JOIN dbo.aspnet_Users U ON U.UserId=C.CreatedBy
INNER JOIN dbo.aspnet_Users U1 ON U1.UserId=C.ModifiedBy
WHERE C.SiteID=@SiteID AND [ContentID] = @TEMP
SET @TEMP= @TEMP+1
END
END
else
print 'error'
这里我得到n个rowa,即它每1个contentid返回1行,而我希望所有返回值都作为一个表。我认为您的整个查询可以归结为:
SELECT
[ContentID]
,[ContentGUID]
,[Description]
,[SiteID]
,[CategoryID]
,[StartDate]
,[DisplayName]
,[ParentId]
,[AssignedAuthors]
,[AssignedEditors]
,[CreatedBy]
,U.UserName as CreatedUser
,dbo.fnGetUserNamesFromUserIds([AssignedAuthors],',') as Authors
,dbo.fnGetUserNamesFromUserIds([AssignedEditors],',') as Editors
,[Created]
,[ModifiedBy]
,U1.UserName as ModifiedUser
,[Modified]
,[Priority]
,COALESCE(ah.ApprovalStatusID,5) as ApprovalStatusID
,COALESCE(ast.StatusName,'New' as StatusName
FROM
[DEV_Content] C
INNER JOIN
dbo.aspnet_Users U
ON
U.UserId=C.CreatedBy
INNER JOIN
dbo.aspnet_Users U1
ON
U1.UserId=C.ModifiedBy
left join
DEV_ContentVersion cv
inner join
DEV_ApprovalHistory ah
on
cv.VersionID = ah.VersionID
inner join
DEV_ApprovalStatus ast
on
ah.ApprovalStatusID = ast.ApprovalStatusID
on
C.ContentID = cv.ContentID
WHERE
C.SiteID=@SiteID
但我必须承认,我不确定DISTINCT在那里打算做什么。我想你的问题有点不对劲-在你分配给
@ApprovalStatusID
的任务中,你真的打算纯粹基于ContentID
搜索开发内容版本
,然后根据ContentID
和SiteID
进行搜索?我注意到同一个语句使用了@ContentID
——它只分配了一次,而不是在循环中递增的@TEMP
。你能说这些是故意的吗?