Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 仅选择SQL Server 2014中通过表继承实现的表列的名称_Asp.net_Sql Server_Listview_Inheritance_Sqldatasource - Fatal编程技术网

Asp.net 仅选择SQL Server 2014中通过表继承实现的表列的名称

Asp.net 仅选择SQL Server 2014中通过表继承实现的表列的名称,asp.net,sql-server,listview,inheritance,sqldatasource,Asp.net,Sql Server,Listview,Inheritance,Sqldatasource,我有一个问题,关于在SQL Server 2014中仅选择表继承实现的表列的名称 也就是说,有四种类型的人(学生、教师、员工和主管),所有这些人都包含从人员表继承的每种类型人员的id,以及必须选择和显示的姓名 表TypePerson: CREATE TABLE [TypesPerson] ( [typePersonID] INT NOT NULL, [typePerson] VARCHAR(50) NOT NULL, CONSTRAINT [PK_TypesPerson

我有一个问题,关于在SQL Server 2014中仅选择表继承实现的表列的名称

也就是说,有四种类型的人(学生教师员工主管),所有这些人都包含从
人员
表继承的每种类型人员的
id
,以及必须选择和显示的姓名

TypePerson

CREATE TABLE [TypesPerson] 
(
    [typePersonID] INT NOT NULL,
    [typePerson] VARCHAR(50) NOT NULL,
    CONSTRAINT [PK_TypesPerson] PRIMARY KEY CLUSTERED ([typePersonID] ASC)
);
CREATE TABLE [Person] 
(
    [personID] INT IDENTITY (1, 1) NOT NULL ,
    [typePersonID] INT NOT NULL,
    CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED ([PersonID] ASC),
    CONSTRAINT [PK_UN_Person_Type] UNIQUE ([typePersonID])
);
CREATE TABLE [Students] 
(
    [personID] INT IDENTITY (1, 1) NOT NULL ,
    [typePersonID] AS 1 PERSISTED, --type person = 1
    [name] VARCHAR(50) NOT NULL,
    CONSTRAINT [PK_Students] PRIMARY KEY CLUSTERED ([PersonID] ASC),
    CONSTRAINT [FK_Students] FOREIGN KEY ([typePersonID])
    REFERENCES [Person] ([typePersonID]),
);
CREATE TABLE [Teachers] 
(
    [PersonID] INT IDENTITY (1, 1) NOT NULL ,
    [typePersonID] AS 2 PERSISTED, --type person = 2
    [name] VARCHAR(50) NOT NULL,
    CONSTRAINT [PK_Teachers ] PRIMARY KEY CLUSTERED ([PersonID] ASC),
    CONSTRAINT [FK_Teachers ] FOREIGN KEY ([typePersonID])
    REFERENCES [Person] ([typePersonID]),
);
CREATE TABLE [Employers] 
(
    [personID] INT IDENTITY (1, 1) NOT NULL ,
    [typePersonID] AS 3 PERSISTED, --type person = 3
    [name] VARCHAR(50) NOT NULL,
    CONSTRAINT [PK_Employers] PRIMARY KEY CLUSTERED ([PersonID] ASC),
    CONSTRAINT [FK_Employers] FOREIGN KEY ([typePersonID])
    REFERENCES [Person] ([typePersonID]),
);
为人员类型插入

INSERT INTO [TypesPerson]
    SELECT 1,'students' UNION ALL
    SELECT 2,'teachers' UNION ALL
    SELECT 3,'employer' UNION ALL
    SELECT 4,'supervisor' 
人员

CREATE TABLE [TypesPerson] 
(
    [typePersonID] INT NOT NULL,
    [typePerson] VARCHAR(50) NOT NULL,
    CONSTRAINT [PK_TypesPerson] PRIMARY KEY CLUSTERED ([typePersonID] ASC)
);
CREATE TABLE [Person] 
(
    [personID] INT IDENTITY (1, 1) NOT NULL ,
    [typePersonID] INT NOT NULL,
    CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED ([PersonID] ASC),
    CONSTRAINT [PK_UN_Person_Type] UNIQUE ([typePersonID])
);
CREATE TABLE [Students] 
(
    [personID] INT IDENTITY (1, 1) NOT NULL ,
    [typePersonID] AS 1 PERSISTED, --type person = 1
    [name] VARCHAR(50) NOT NULL,
    CONSTRAINT [PK_Students] PRIMARY KEY CLUSTERED ([PersonID] ASC),
    CONSTRAINT [FK_Students] FOREIGN KEY ([typePersonID])
    REFERENCES [Person] ([typePersonID]),
);
CREATE TABLE [Teachers] 
(
    [PersonID] INT IDENTITY (1, 1) NOT NULL ,
    [typePersonID] AS 2 PERSISTED, --type person = 2
    [name] VARCHAR(50) NOT NULL,
    CONSTRAINT [PK_Teachers ] PRIMARY KEY CLUSTERED ([PersonID] ASC),
    CONSTRAINT [FK_Teachers ] FOREIGN KEY ([typePersonID])
    REFERENCES [Person] ([typePersonID]),
);
CREATE TABLE [Employers] 
(
    [personID] INT IDENTITY (1, 1) NOT NULL ,
    [typePersonID] AS 3 PERSISTED, --type person = 3
    [name] VARCHAR(50) NOT NULL,
    CONSTRAINT [PK_Employers] PRIMARY KEY CLUSTERED ([PersonID] ASC),
    CONSTRAINT [FK_Employers] FOREIGN KEY ([typePersonID])
    REFERENCES [Person] ([typePersonID]),
);
学生
扩展

CREATE TABLE [TypesPerson] 
(
    [typePersonID] INT NOT NULL,
    [typePerson] VARCHAR(50) NOT NULL,
    CONSTRAINT [PK_TypesPerson] PRIMARY KEY CLUSTERED ([typePersonID] ASC)
);
CREATE TABLE [Person] 
(
    [personID] INT IDENTITY (1, 1) NOT NULL ,
    [typePersonID] INT NOT NULL,
    CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED ([PersonID] ASC),
    CONSTRAINT [PK_UN_Person_Type] UNIQUE ([typePersonID])
);
CREATE TABLE [Students] 
(
    [personID] INT IDENTITY (1, 1) NOT NULL ,
    [typePersonID] AS 1 PERSISTED, --type person = 1
    [name] VARCHAR(50) NOT NULL,
    CONSTRAINT [PK_Students] PRIMARY KEY CLUSTERED ([PersonID] ASC),
    CONSTRAINT [FK_Students] FOREIGN KEY ([typePersonID])
    REFERENCES [Person] ([typePersonID]),
);
CREATE TABLE [Teachers] 
(
    [PersonID] INT IDENTITY (1, 1) NOT NULL ,
    [typePersonID] AS 2 PERSISTED, --type person = 2
    [name] VARCHAR(50) NOT NULL,
    CONSTRAINT [PK_Teachers ] PRIMARY KEY CLUSTERED ([PersonID] ASC),
    CONSTRAINT [FK_Teachers ] FOREIGN KEY ([typePersonID])
    REFERENCES [Person] ([typePersonID]),
);
CREATE TABLE [Employers] 
(
    [personID] INT IDENTITY (1, 1) NOT NULL ,
    [typePersonID] AS 3 PERSISTED, --type person = 3
    [name] VARCHAR(50) NOT NULL,
    CONSTRAINT [PK_Employers] PRIMARY KEY CLUSTERED ([PersonID] ASC),
    CONSTRAINT [FK_Employers] FOREIGN KEY ([typePersonID])
    REFERENCES [Person] ([typePersonID]),
);
教师
扩展
人员

CREATE TABLE [TypesPerson] 
(
    [typePersonID] INT NOT NULL,
    [typePerson] VARCHAR(50) NOT NULL,
    CONSTRAINT [PK_TypesPerson] PRIMARY KEY CLUSTERED ([typePersonID] ASC)
);
CREATE TABLE [Person] 
(
    [personID] INT IDENTITY (1, 1) NOT NULL ,
    [typePersonID] INT NOT NULL,
    CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED ([PersonID] ASC),
    CONSTRAINT [PK_UN_Person_Type] UNIQUE ([typePersonID])
);
CREATE TABLE [Students] 
(
    [personID] INT IDENTITY (1, 1) NOT NULL ,
    [typePersonID] AS 1 PERSISTED, --type person = 1
    [name] VARCHAR(50) NOT NULL,
    CONSTRAINT [PK_Students] PRIMARY KEY CLUSTERED ([PersonID] ASC),
    CONSTRAINT [FK_Students] FOREIGN KEY ([typePersonID])
    REFERENCES [Person] ([typePersonID]),
);
CREATE TABLE [Teachers] 
(
    [PersonID] INT IDENTITY (1, 1) NOT NULL ,
    [typePersonID] AS 2 PERSISTED, --type person = 2
    [name] VARCHAR(50) NOT NULL,
    CONSTRAINT [PK_Teachers ] PRIMARY KEY CLUSTERED ([PersonID] ASC),
    CONSTRAINT [FK_Teachers ] FOREIGN KEY ([typePersonID])
    REFERENCES [Person] ([typePersonID]),
);
CREATE TABLE [Employers] 
(
    [personID] INT IDENTITY (1, 1) NOT NULL ,
    [typePersonID] AS 3 PERSISTED, --type person = 3
    [name] VARCHAR(50) NOT NULL,
    CONSTRAINT [PK_Employers] PRIMARY KEY CLUSTERED ([PersonID] ASC),
    CONSTRAINT [FK_Employers] FOREIGN KEY ([typePersonID])
    REFERENCES [Person] ([typePersonID]),
);
雇主
扩展
人员

CREATE TABLE [TypesPerson] 
(
    [typePersonID] INT NOT NULL,
    [typePerson] VARCHAR(50) NOT NULL,
    CONSTRAINT [PK_TypesPerson] PRIMARY KEY CLUSTERED ([typePersonID] ASC)
);
CREATE TABLE [Person] 
(
    [personID] INT IDENTITY (1, 1) NOT NULL ,
    [typePersonID] INT NOT NULL,
    CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED ([PersonID] ASC),
    CONSTRAINT [PK_UN_Person_Type] UNIQUE ([typePersonID])
);
CREATE TABLE [Students] 
(
    [personID] INT IDENTITY (1, 1) NOT NULL ,
    [typePersonID] AS 1 PERSISTED, --type person = 1
    [name] VARCHAR(50) NOT NULL,
    CONSTRAINT [PK_Students] PRIMARY KEY CLUSTERED ([PersonID] ASC),
    CONSTRAINT [FK_Students] FOREIGN KEY ([typePersonID])
    REFERENCES [Person] ([typePersonID]),
);
CREATE TABLE [Teachers] 
(
    [PersonID] INT IDENTITY (1, 1) NOT NULL ,
    [typePersonID] AS 2 PERSISTED, --type person = 2
    [name] VARCHAR(50) NOT NULL,
    CONSTRAINT [PK_Teachers ] PRIMARY KEY CLUSTERED ([PersonID] ASC),
    CONSTRAINT [FK_Teachers ] FOREIGN KEY ([typePersonID])
    REFERENCES [Person] ([typePersonID]),
);
CREATE TABLE [Employers] 
(
    [personID] INT IDENTITY (1, 1) NOT NULL ,
    [typePersonID] AS 3 PERSISTED, --type person = 3
    [name] VARCHAR(50) NOT NULL,
    CONSTRAINT [PK_Employers] PRIMARY KEY CLUSTERED ([PersonID] ASC),
    CONSTRAINT [FK_Employers] FOREIGN KEY ([typePersonID])
    REFERENCES [Person] ([typePersonID]),
);
插入数据以创建具有以下类型的人员:

INSERT INTO [Person] ([typePersonID]) VALUES (1); --students
INSERT INTO [Person] ([typePersonID]) VALUES (2); --teachers
INSERT INTO [Person] ([typePersonID]) VALUES (3); --employer
INSERT INTO [Person] ([typePersonID]) VALUES (4); --supervisor
插入数据以创建学生、教师和雇主:

INSERT INTO [Students]  ([name])  VALUES ('John'); --students
INSERT INTO [Teachers]  ([name])  VALUES ('Robert'); --teachers
INSERT INTO [Employers] ([name])  VALUES ('Ciara'); --employer
INSERT INTO [Supervisor] ([name]) VALUES ('Renata'); --supervisor
当我使用此脚本仅选择名称时

SELECT st.name, ts.name, es.name,  sp.name
FROM Person p
INNER JOIN Students   st ON p.personID= st.personID
INNER JOIN Teachers   ts ON p.personID= ts.personID
INNER JOIN Employers  es ON p.personID= es.personID
INNER JOIN Supervisor sp ON p.personID= sp.personID;
结果是

当我使用


有什么建议吗?

尝试以下方法时,您会感到惊讶:

SELECT t.typePerson, sp.name
FROM Person p
INNER JOIN [TypesPerson] as t ON p.[typePersonID] = t.[typePersonID]
INNER JOIN Supervisor sp ON p.personID= sp.personID;
问题是您有两个问题:
1.重复数据:
typePersonID
为同一个人存储两次。
2.
Person
中的
personID
与其他表中的
personID
没有任何关联

本质上,最好只有一个
Person
表,只需在其中添加name列即可。它会解决你所有的问题

而且,代替

CONSTRAINT [PK_UN_Person_Type] UNIQUE ([typePersonID])


通过使用
Pivot
您可以实现您的结果。但用简单的方法你可以试试

SELECT st.name Name
FROM Person p
INNER JOIN Students   st ON p.personID= st.personID

union
SELECT  ts.name Name
FROM Person p
INNER JOIN Teachers   ts ON p.personID= ts.personID
union

SELECT  es.name Name
FROM Person p
INNER JOIN Employers  es ON p.personID= es.personID
union

SELECT   sp.name Name
FROM Person p
INNER JOIN Supervisor sp ON p.personID= sp.personID

你必须使用unpivot。您的
Person
表设计允许最多插入4行,每种“类型的人”一行。@AlexKudryashev,我不这样说,因为它有很多问题的代码,我发现Adityathanks的答案很有价值,而且它的工作非常完美,列表视图水平显示所有姓名,