我在sql server 2012工作,我有桌子
Students
包含
fields: StudentId, Name, City, Username, Password
。
我需要将分组表学生放入下一个表:Students
和Users
。和表
Users
必须包含下一个字段:UserId, Username, Password
。
表格Students
必须包含:StudentId, Name, City, UserId
。
我的问题是:我怎么能通过代码来做到这一点?
P.S。:我是sql的新手。我知道这可能是个公主,但我不明白该怎么做。
答案 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