Hỏi đáp
Chia sẻ kiến thức, cùng nhau phát triển
Chào anh Long, em đang làm CSDL phân quyền cho người dùng bằng linq. Em tạo 2 bảng: Role và UserRole. Lúc em thêm dữ liệu vào thì nó báo lỗi:
CREATE DATABASE LOGIN_ROLE
GO
USE LOGIN_ROLE
GO
CREATE TABLE ROLE
(
USERROLE VARCHAR(50) PRIMARY KEY
)
GO
CREATE TABLE USERROLE
(
USERID VARCHAR(50)
FOREIGN KEY(USERID) REFERENCES dbo.ROLE(USERROLE)
)
GO
INSERT dbo.USERROLE
(
USERID
)
VALUES
(
'1'-- USERID - varchar(50)
)
INSERT dbo.USERROLE
(
USERID
)
VALUES
(
'2'-- USERID - varchar(50)
)
GO
INSERT dbo.ROLE
(
USERROLE
)
VALUES
('Admin' -- USERROLE - varchar(50)
)
INSERT dbo.ROLE
(
USERROLE
)
VALUES
('User' -- USERROLE - varchar(50)
)
GO
Msg 547, Level 16, State 0, Line 16
The INSERT statement conflicted with the FOREIGN KEY constraint "FK__USERROLE__USERID__25869641". The conflict occurred in database "LOGIN_ROLE", table "dbo.ROLE", column 'USERROLE'.
The statement has been terminated.
Msg 547, Level 16, State 0, Line 24
The INSERT statement conflicted with the FOREIGN KEY constraint "FK__USERROLE__USERID__25869641". The conflict occurred in database "LOGIN_ROLE", table "dbo.ROLE", column 'USERROLE'.
The statement has been terminated.
Lỗi này là sao anh và cách khắc phục?
Lỗi: cố gắng insert dữ liệu vào một bảng USERROLE mà có cột USERID (khóa ngoại ) liên kết với với cột USERROLE (khóa chính) ở một bảng khác ROLE, Mà bên khóa chính chưa tồn tại dữ liệu đó.
Bạn có thể giải quyến vấn đề bằng việc ưu tiên INSERT dữ liệu có khóa chính trước.
Ngoài ra mình xin phép sửa lại câu lệnh CREATE TABLE của bạn như sau để bạn dễ hiểu hơn
Đến phần INSERT
Minh đã insert dữ liệu vào bảng Role chứa khóa chính trước mà sao nó vẫn báo lỗi. Mình không hiểu
Tạo bảng:
Insert dữ liệu: