Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: Không tạo được khóa ngoại trong MS SQL

  1. #1
    Ngày gia nhập
    11 2011
    Bài viết
    8

    Mặc định Không tạo được khóa ngoại trong MS SQL

    Em không thể tạo dc khóa ngoại trong MS SQL
    Em có 1 bảng User
    có trường UserName varchar(50) primarykey not null,
    trong 1 bảng Categories em có trương Create_by và trường Modify_by
    có cùng kiểu dl với trường UserName trong bảng User
    khii em tạo khóa ngoại thì nó bão lỗi!
    "Msg 1776, Level 16, State 0, Line 1
    There are no primary or candidate keys in the referenced table 'User' that match the referencing column list in the foreign key 'FK_CATE_CREATED_BY'.
    Msg 1750, Level 16, State 0, Line 1
    Could not create constraint. See previous errors.
    "
    Anh nào biết khắc phục lỗi này giúp em với!
    Đã được chỉnh sửa lần cuối bởi goalapple : 22-03-2012 lúc 02:08 AM.

  2. #2
    Ngày gia nhập
    03 2010
    Bài viết
    236

    Trích dẫn Nguyên bản được gửi bởi goalapple Xem bài viết
    Em không thể tạo dc khóa ngoại trong MS SQL
    Em có 1 bảng User
    có trường UserName varchar(50) primarykey not null,
    trong 1 bảng Categories em có trương Create_by và trường Modify_by
    có cùng kiểu dl với trường UserName trong bảng User
    khii em tạo khóa ngoại thì nó bão lỗi!
    "Msg 1776, Level 16, State 0, Line 1
    There are no primary or candidate keys in the referenced table 'User' that match the referencing column list in the foreign key 'FK_CATE_CREATED_BY'.
    Msg 1750, Level 16, State 0, Line 1
    Could not create constraint. See previous errors.
    "
    Anh nào biết khắc phục lỗi này giúp em với!
    Bạn thử kiểm tra lại trong bảng user,trường username đã thực sự là khóa chính chưa.

  3. #3
    Ngày gia nhập
    12 2009
    Nơi ở
    Thanh Xuan, HN, Vietnam
    Bài viết
    42

    Trích dẫn Nguyên bản được gửi bởi goalapple Xem bài viết
    Em nghĩ không cùng tên nhưng mà chắc vẫn tạo dc khóa ngoại chứ nhỉ?
    Bạn có thể viết rõ câu lệnh tạo nên bảng và khóa ngoại được không?

  4. #4
    Ngày gia nhập
    11 2011
    Bài viết
    8

    Trích dẫn Nguyên bản được gửi bởi mr.quang Xem bài viết
    Bạn có thể viết rõ câu lệnh tạo nên bảng và khóa ngoại được không?
    Đầu tiên em tạo bảng [User]
    Code:
    CREATE TABLE [User]
    (
        
        [USER_ID] [INT] IDENTITY(1,1) NOT NULL,
        [USER_NAME] [varchar](50) NOT NULL,
        [FULL_NAME] [nvarchar](50) NOT NULL,
        [EMAIL] [nchar](50) NOT NULL,
        [PASSWORD] NCHAR(20) NOT NULL,
        [PHONE_NUMBER] [NCHAR](15) NOT NULL,
        [ORDER_DISPLAY] [int] NOT NULL, --THỨ TỰ HIỂN THỊ
        [NUM_LOG] [int] NOT NULL, --SỐ LẦN ĐĂNG NHẬP HỆ THỐNG
        [CREATED_DATE] [datetime] NOT NULL,
        [CREATED_BY] [varchar](50) NOT NULL,
        [MODIFY_DATE] [datetime] NOT NULL,
        [MODIFY_BY] [varchar](50) NOT NULL,
        [STATUS] [INT] NOT NULL,
        CONSTRAINT PK_USER PRIMARY KEY (USER_ID,USER_NAME,EMAIL)
     )
    Sau dó em tạo bảng Banner để lưu thông tin về các Banner quảng cáo!
    Code:
    CREATE TABLE Banner
    (
        [BANNER_ID] [INT] IDENTITY(1,1) PRIMARY KEY NOT NULL,
        [BANNER_NAME] [nvarchar](200) NOT NULL,
        [LINK] [nvarchar](200),
        [IMG_URL] [VARCHAR](MAX),
        [CREATE_DATE] [DATETIME] NOT NULL,
        [CREATED_BY] [varchar](50) NOT NULL,
        [EXPIRATION_DATE] [DATETIME] null, --NGÀY HẾT HẠN
        [LOCATION] [VARCHAR] NOT NULL,
        [STATUS] [INT] NOT NULL,
        CONSTRAINT FK_BANNER_CREATED_BY FOREIGN KEY(CREATED_BY) REFERENCES [User](USER_NAME)
    )
    Trường CREATE _BY và trườn USER_NAME có tên khác nhau anhwng có cùng kdl
    Nhưng em nghĩ trong trường hơp này nó vẫn tạo dc khóa ngọai chứ nhỉ?

  5. #5
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Cái khóa ngoại trong bảng B không giống cái khóa chính trong bảng A thì lấy gì mà nối.
    Học lại liên hệ giữa khóa chính và khóa ngoại
    Cũng cần học lại cách thành lập khóa chính. Theo code trên thì sai bấy nhầy.

  6. #6
    Ngày gia nhập
    03 2008
    Nơi ở
    Hồ chí minh
    Bài viết
    134

    Mặc định Không tạo được khóa ngoại trong MS SQL

    @goalapple : khi bạn tạo 1 composite primary key (USER_ID,USER_NAME,EMAIL) thì có nghĩa khi xác định 1 đối tượng nào đấy cần phải có sự góp mặt của cả ba mới suy ra được đối tượng đấy chính xác là đối tượng nào, thiếu 1 trong 3 là ko thể xác định được..vì đây là bản chất của vấn đề nên lúc tạo 1 foreign key ở dưới mà chỉ trỏ đến 1 trong 3 khóa nên đương nhiên là dẫn đến lỗi như bạn đã nêu.

    để giải quyết thì có 2 cách (2 cách mình hay dùng..còn cách nào khác thì bạn có thể tìm hiểu thêm):
    cách thứ nhất:
    bạn cũng phải tạo bên trong bảng Banner thêm 2 cột USER_ID VÀ EMAIL, dòng tạo khóa ngoại sẽ như sau:
    Code:
    CONSTRAINT FK_BANNER_CREATED_BY FOREIGN KEY(USER_ID,CREATED_BY,email) REFERENCES [User](USER_ID,USER_NAME,EMAIL)
    cách thứ hai: bạn phải tạo 1 unique index của cột mà muốn tham chiếu khóa ngoại đến trong bảng User

    Code:
    CREATE UNIQUE NONCLUSTERED INDEX UIX_ID 
      ON [User](USER_NAME)
    sau khi run xong câu lệnh này, bạn có thể chạy câu lênh tạo bảng banner với khóa ngoại như bạn post ở trên bình thường
    (nếu bạn có thắc mắc j về index thì có thể tìm hiểu bằng cách google, gõ 'index in sql' )
    Every step I'm taking
    Every move I make
    Feels lost with no direction
    My faith is shaking
    But I gotta keep trying.

  7. #7
    Ngày gia nhập
    09 2013
    Bài viết
    2

    Mặc định Xin các pro chỉ giúp

    create TABLE ChungTu
    (
    ID INT IDENTITY(1,1),
    MaCT Varchar(20) ,
    NgayCT DATETIME,
    MaKH VARCHAR(10),
    MaKho VARCHAR(10),
    MaNX INT, -- Tính chất xuất
    MaPhuongTien INT,
    SoNgan INT,
    DungTich INT, -- DUNG TÍCH XE
    --ArmNumber INT,
    BayNumber INT,
    NguoiGiaoDich NVARCHAR(30),
    NguoiVC NVARCHAR(30),
    LenhVC NVARCHAR(20),
    NgayLenhVC DATETIME,
    SoGiayGT VARCHAR(20),
    NgayGiayGT DATETIME, --- giấy giới thiệu
    NgayHHGGT DATETIME,
    GhiChu NVARCHAR(255),
    MaTrangThai INT,
    TotalPreset INT, ---Tổng lượng đặt
    TotalGross INT, -- Tổng lượng xuất TT
    TongL15 INT,
    TongKG INT,
    ToTalDifference INT, -- Chênh lệch tổng
    MaDoiTuong INT, ---
    MaNguoiTao INT,
    MaNguoiSua INT,
    ParentID INT,
    SMS_KEY VARCHAR(36),
    PRIMARY KEY(ID,MaCT),
    FOREIGN KEY (MaKH)REFERENCES DM_KHACHHANG(MaKH),
    FOREIGN KEY (MaKho)REFERENCES DM_KHOHANG(MaKho),
    FOREIGN KEY (MaPhuongTien)REFERENCES DM_XITEC(MaPhuongTien),
    FOREIGN KEY (MaTrangThai)REFERENCES TrangThai(MaTrangThai),
    FOREIGN KEY (MaDoiTuong)REFERENCES DoiTuongKD(MaDoiTuong),
    FOREIGN KEY (MaNguoiTao)REFERENCES Users(UserID)
    --FOREIGN KEY (MaCT)REFERENCES ChungTu(MaCT),
    )

    CREATE TABLE ChungTuNgan
    (
    ID INT IDENTITY(1,1),
    MaCT Varchar(20) ,
    MaLenh INT ,
    MaNgan VARCHAR(2),
    MaHH VARCHAR(10),
    MaDVT VARCHAR(5),
    ArmNumber INT,
    BayNumber INT,
    Preset_Com INT, ---Tổng lượng đặt ngăn
    Gross_Com INT, -- Tổng lượng xuất ngăn TT
    TongL15 INT,
    TongKG INT,
    Difference_Com INT, -- Chênh lệch ngăn
    SL_KHAC FLOAT,
    NhietDo FLOAT,
    TyTrong FLOAT,
    HeSo_VCF FLOAT,
    HeSo_WCF FLOAT,
    GhiChu NVARCHAR(255),
    TG_Dau DATETIME,
    TG_Cuoi DATETIME,
    TransactionNumber INT,
    BatchNumber INT,
    AccTotalBefor INT,
    AccTotalAfter INT,
    TrangThai INT,
    CL_TM INT,
    PRIMARY KEY(ID),
    FOREIGN KEY (MaHH) REFERENCES DM_HANGHOA(MaHH),
    FOREIGN KEY (MaDVT) REFERENCES DM_DVT(MaDVT),
    FOREIGN KEY (MaCT)REFERENCES ChungTu(MaCT)
    )


    Lỗi của em như này
    Msg 1776, Level 16, State 0, Line 1
    There are no primary or candidate keys in the referenced table 'ChungTu' that match the referencing column list in the foreign key 'FK__ChungTuNga__MaCT__2942188C'.
    Msg 1750, Level 16, State 0, Line 1
    Could not create constraint. See previous errors.

    Pro nào giải quyết được dùm ko ạ. Thanks !!

Các đề tài tương tự

  1. Không xóa sửa trong linq dc, CSDL có 2 khóa chính Combo vs dattimepicker, 1 combo khóa ngoại
    Gửi bởi kenlove798 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 13-07-2014, 08:09 AM
  2. Tạo khóa ngoại trong SQL như thế nào?
    Gửi bởi grace trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 10
    Bài viết cuối: 09-05-2013, 04:46 PM
  3. Cách bắt lỗi ngoại lệ về khóa ngoại khóa chính trong ADO.NET?
    Gửi bởi bachkim20 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 03-01-2013, 03:45 PM
  4. Cách tạo ràng buộc khóa chính khóa ngoại trong SQL?
    Gửi bởi nghiameo trong diễn đàn Thắc mắc MySQL và SQLite
    Trả lời: 7
    Bài viết cuối: 04-12-2012, 09:23 PM
  5. SQLite với C/C++ Xử lý khóa ngoại trong SQLite? Giúp em với.
    Gửi bởi conglaogia trong diễn đàn Thắc mắc MySQL và SQLite
    Trả lời: 4
    Bài viết cuối: 19-04-2011, 12:48 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn