1

我的 INSERT 语句如下;

INSERT INTO StudentRecord ( Name, schoolid, age)
VALUES ('Hello', 1, '12')

我的数据库中有 2 个表;

第一个——

School它具有以下字段;

id, schoolName

第二——

StudentRecord 它有以下文件;

studentid, studentName, schoolid, age

现在我要做的是将学校名称而不是 schoolId 添加到插入语句中,并将其保存在StudentRecord表中。我怎样才能做到这一点 ?

例如,我添加1为 schoolId 的地方应该是学校的名称。

4

5 回答 5

1

您可以使用insert ... select而不是insert ... values

insert  StudentRecord
        (Name, Schoolid, Age)
select  @StudentName
,       id
,       @StudentAge
from    Schools
where   schoolName = @SchoolName

我添加了变量(如@SchoolName),您可以在其中输入值。

于 2013-02-23T19:13:19.150 回答
1

对于 OP....有一些数据库理论你有点模糊,你需要清楚地理解它,然后人们给你的答案才会完全有意义。

不要在插入后查看原始数据表,并期望每个字段都是数据的文本表示。您希望在插入数据后查看数据,使用查询将相应的表彼此连接起来,从而以可读的格式呈现数据。您不会以可读的格式插入它。您插入,然后以可读格式查询和查看它。

您正在通过使用学校名称代替 ID 来对数据库进行非规范化。规范化是保持系统冗余和最佳数据库性能的关键概念。例如,一次更改一处,更改所有使用它的记录。了解规范化将引导您理解为什么这是一个糟糕的解决方案。

这里有几个链接给你。

微软知识库文章

维基百科数据库规范化

于 2013-02-23T20:16:30.190 回答
0

将 schoolid 更改为 schoolName。

使用 schoolid 检索 schoolName。(使用选择)

检索后,您现在可以将您的学校名称存储在那里。

于 2013-02-23T19:16:54.720 回答
0

你将不得不修改你的表..

ALTER TABLE StudentRecord ALTER COLUMN schoolid varchar(100)

现在只需输入学校名称代替学校ID!

于 2013-02-23T19:18:40.267 回答
-1

不知道为什么要这样做,因为您正在对结构进行非规范化。您也不应该存储age,因为它会更改并且是计算字段。而是存储出生日期。

但这样的事情可能会奏效:

INSERT INTO someTable
SELECT a.studentId, a.studentName, b.schoolName, a.age
FROM StudentRecord a
INNER JOIN School b ON b.id = a.schoolid
于 2013-02-23T19:13:24.630 回答