如何将一个表分成两个

时间:2014-02-22 15:00:02

标签: sql sql-server sql-server-2012

我在sql server 2012工作,我有桌子 Students包含 fields: StudentId, Name, City, Username, Password

我需要将分组表学生放入下一个表:StudentsUsers。和表

Users必须包含下一个字段:UserId, Username, Password

表格Students必须包含:StudentId, Name, City, UserId

我的问题是:我怎么能通过代码来做到这一点?

P.S。:我是sql的新手。我知道这可能是个公主,但我不明白该怎么做。

3 个答案:

答案 0 :(得分:2)

填写学生表第1页,由于您已经在表数据库中有学生表,因此您无法拥有另一个名为学生的表,因此请初次将其称为students_new。

将UserID标识COlumn添加到原始表

ALTER TABLE Students
ADD UserID INT IDENTITY(1,1)

学生表

SELECT  StudentId, Name, City, UserId INTO Students_New
FROM Students

用户表

SELECT UserId, Username, Password INTO Users
FROM Students

删除原始学生表并重命名新表

现在您可以删除实际的学生表并将Students_New表重命名为Students

DROP TABLE Students
GO

EXECUTE sp_rename 'Students_New','Students';
GO

答案 1 :(得分:1)

您可以按以下步骤执行此操作:

创建用户表。由于您没有UserID,因此可以使用标识列生成它。

CREATE TABLE Users (
UserID bigint IDENTITY(1,1) PRIMARY KEY NOT NULL,
Username nvarchar(255),
Password nvarchar(255)
)

将数据插入用户表

INSERT INTO Users (
Username,
Password
)
SELECT
Username,
Password
FROM
[Existing table]

现在,创建学生表

CREATE TABLE Students (
StudentID bigint PRIMARY KEY NOT NULL,
Name nvarchar(255),
City nvarchar(255),
UserID bigint FOREIGN KEY REFERENCES User(UserID)
)

并将数据插入学生表

INSERT INTO Students (
StudentID,
Name,
City,
UserID
)
SELECT
StudentID,
Name,
City,
UserID
FROM
[Existing table] A INNER JOIN [Users] B
ON A.Username = B.Username

如果原始表名是Students,请将上表创建为Students_New。 然后,在创建和插入后,您可以使用以下脚本:

DROP TABLE dbo.Students
GO;

EXEC sp_rename 'Students_New', 'Students'

答案 2 :(得分:1)

  

我认为用户名不在表中。所以像@ M.ali说的那样先保留   一张旧桌子。我认为用户ID是自动生成的。   所以还要在用户表中创建studentid

第一步,

SELECT studentid, Username, Password INTO Users
FROM Students

现在更新学生表以在学生表中插入用户ID

update student set userid=u.userid
from student a inner join user u on s.studentid=u.userid