自动填充FK

时间:2018-07-23 04:13:08

标签: sql sql-server create-table insert-into

好的,所以我正在设置一个新的小型数据库。将所有内容放置在白板上后,我开始在SQL Server中创建它。我已经用关联的PK和FK创建了所有表。但是,当我将数据插入这些表中时,我希望我的PK和FK自动填充我认为在创建表期间已设置的数据。例如,假设我有3列,一列是PK,另一列是FK。当我在该表中插入一条新记录时,我只想指定第三列名称的信息,该信息不是PK / FK,并且具有PK自动递增,并且允许FK为空。

enter image description here

我使用的CREATE语句是:

CREATE TABLE CONSOLE
(
     consoleID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
     consoleName VARCHAR(25) NOT NULL,
     userID int FOREIGN KEY REFERENCES USER(userID)
);

所以当我添加一条记录时,我想使用:

INSERT INTO CONSOLE
VALUES ('Xbox');

1 个答案:

答案 0 :(得分:-1)

我希望您稍后将通过更新表来填充FK值。因为,RDBMS不会自动为您填充FK值。

创建表,将FK的默认值设置为NULL,如下所示。

CREATE TABLE CONSOLE(
    consoleID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
    consoleName VARCHAR(25) NOT NULL,
    userID int FOREIGN KEY REFERENCES USER(userID) DEFAULT NULL 
);

当您插入表中时,请指定列名。现在,PK将是自动递增的值,而FK将是NULL。

INSERT INTO CONSOLE(ConsoleName)
VALUES ('Xbox');

编辑

我从评论中看到您要自动填充PK和FK。无法自动填充FK。您可以通过两种方式做到这一点:

  1. 编写一个AFTER INSERT触发器,该触发器将在表中找到正确的FK值和INSERT。
  2. 写一个带有存储参数的存储过程。获取ConsoleName的值,然后在表中找到正确的FK值和INSERT,如下所示。

DECLARE @rightUserId INT; -- Find value for this INSERT INTO CONSOLE(ConsoleName, UserId) VALUES ('Xbox',@rightUserId);