0

ねえ、ストアド プロシージャを作成するためのヘルプを探しています。プロジェクトとパートナー間のリンクを保持する別のテーブルがあり、プロジェクトに関する情報を保持Partnersする別のテーブルがありますの外部キーは内にあります。partner information (Columns, PartnerID and partnername)ProjectPartnerscolumns( PPID, Partner1, partner2, partner3....partner25)ProjectDetailscolumns( ProjectDID, Project)projectpartnersProjectdetails

を入力できるストアド プロシージャを作成しようとしてpartner nameいます。これにより、それらが含まれているプロジェクトが表示されます。私はすでにいくつかのモックコードを持っていますが、うまくいかないようです。

@partnername nvarchar(50)
AS 
SET NOCOUNT ON;
SELECT ProjectDID, Project
FROM Projectdetails
WHERE Partners.PartnerName = @partnername

どんな助けでも大歓迎です

4

1 に答える 1

1

必要なデータを取得するためのテーブル スキーマを介した結合がありません。joinsに関するこの MSDN の記事を読んでください。

select ProjectDetails.ProjectDID, ProjectDetails.Project
from ProjectDetails
join ProjectPartners on ProjectPartners.ProjectDID = ProjectDetails.ProjectDID
join Partners on Partners.PartnerId  = ProjectPartners.PPID
where Partners.PartnerName = @partnerName

ProjectPartnersとの関係を説明していないので、上の列が関係でPartnerあると想定していますPPIDProjectPartners

ProjectPartnersまた、テーブルには列があることにも言及しましたPPID, Partner1, partner2, partner3....partner25。25 人のパートナーのみを計画していますか。26 の場合、新しい列を追加しますか? あなたはそれに対処したいかもしれません。

また、列の命名規則には、少し混乱しているものもあります。を持っPPIDていProjectPartnersます。という意味だと思いますProjectPartnersId。テーブルProjectDetailsには列がありますProjectDID。これは少し矛盾しています。PDIDそれは ProjectPartners に掲載するか、ProjectDetailsまたはProjectPIDProjectPartnersに掲載する必要があると思いIdます。

アップデート:

以下のコメントに基づいて、テーブルに少し根本的な問題があるように思えます。

create table Partners (
    Id int not null primary key identity,
    PartnerName nvarchar(100) not null)
go

create table ProjectDetails(
    Id int not null primary key identity,
    Project nvarchar(100) not null)
go


create table ProjectPartners (
PartnersId int not null,
    ProjectDetailsId int not null
)
go

alter table ProjectPartners add constraint FK_ProjectPartners_PartnersId_Partners_Id foreign key (PartnersId) references Partners(Id)
alter table ProjectPartners add constraint FK_ProjectPartners_ProjectDetailsId_ProjectDetails_Id foreign key (ProjectDetailsId) references ProjectDetails(Id)
go

上記のように、データベース スキーマをもう少し柔軟なものに変更することをお勧めします。ProjectPartnersこれにより、新しいパートナーが生まれるたびに新しい列が追加され、テーブルが増え続けるのを防ぐことができます。

外部キーに関するすべての問題を修正し、テーブルをもう少し直感的にします。

これにより、次の SQL が生成されます。

select ProjectDetails.Project, ProjectDetails.Id
from ProjectDetails
join ProjectPartners on ProjectPartners.ProjectDetailsId = ProjectDetails.Id
join Partners on Partners.Id = ProjectPartners.PartnersId
where Partners.PartnerName= @partnerName
于 2013-06-17T10:56:04.487 に答える