自动填充 FK
Auto populating FKs
好的,我正在尝试设置一个新的小型数据库。在将其全部布置在白板上后,我开始在 SQL 服务器中创建它。我已经得到了我所有的 tables 创建与他们相关的 PKs 和 FKs。但是,当我将数据插入这些 table 时,我希望我的 PK 和 FK 自动填充,我认为我在 table 创建期间已经设置好了。例如,假设我有 3 列,一列是 PK,另一列是 FK。当我插入此 table 一条新记录时,我只想指定非 PK/FK 的第 3 列名称的信息,并让 PK 自动递增,并允许 FK 到为空。
我使用的 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');
我希望您稍后通过更新 table 填充 FK 值。因为,RDBMS 不会自动为您填充 FK 值。
创建 table,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
);
插入table时指定列名。现在,PK 将自动增加值,FK 将为 NULL。
INSERT INTO CONSOLE(ConsoleName)
VALUES ('Xbox');
编辑
我从评论中看到您想要自动填充 PK 和 FK。无法自动填充 FK。您可以通过两种方式做到这一点:
- 编写一个 AFTER INSERT 触发器,它将找到正确的 FK 值并插入到 table。
- 写一个带参数的存储过程用于插入。获取 ConsoleName 的值并找到正确的 FK 值并插入到 table 中,如下所示。
DECLARE @rightUserId INT; -- Find value for this
INSERT INTO CONSOLE(ConsoleName, UserId)
VALUES ('Xbox',@rightUserId);
好的,我正在尝试设置一个新的小型数据库。在将其全部布置在白板上后,我开始在 SQL 服务器中创建它。我已经得到了我所有的 tables 创建与他们相关的 PKs 和 FKs。但是,当我将数据插入这些 table 时,我希望我的 PK 和 FK 自动填充,我认为我在 table 创建期间已经设置好了。例如,假设我有 3 列,一列是 PK,另一列是 FK。当我插入此 table 一条新记录时,我只想指定非 PK/FK 的第 3 列名称的信息,并让 PK 自动递增,并允许 FK 到为空。
我使用的 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');
我希望您稍后通过更新 table 填充 FK 值。因为,RDBMS 不会自动为您填充 FK 值。
创建 table,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
);
插入table时指定列名。现在,PK 将自动增加值,FK 将为 NULL。
INSERT INTO CONSOLE(ConsoleName)
VALUES ('Xbox');
编辑
我从评论中看到您想要自动填充 PK 和 FK。无法自动填充 FK。您可以通过两种方式做到这一点:
- 编写一个 AFTER INSERT 触发器,它将找到正确的 FK 值并插入到 table。
- 写一个带参数的存储过程用于插入。获取 ConsoleName 的值并找到正确的 FK 值并插入到 table 中,如下所示。
DECLARE @rightUserId INT; -- Find value for this
INSERT INTO CONSOLE(ConsoleName, UserId)
VALUES ('Xbox',@rightUserId);