获取AutoIncrement ID并插入外键表

时间:2016-06-08 12:36:26

标签: sql asp.net sql-server sql-server-2008 c#-4.0

我有3个表UserProfileProfilePictureProfileProfilePictureUser表具有外键关系。我想在这里做的是每当我通过Web应用程序将数据插入User表时,AutoGeneratedID获取并插入到ProfileProfilePicture表中。

CREATE TABLE User 
(
    UserId INT(11) NOT NULL AUTO_INCREMENT, 
    Username VARCHAR(45) NOT NULL, 
    Password VARCHAR(50) NOT NULL,
    PRIMARY KEY (`UserId`), 
    UNIQUE INDEX `UserIdId_UNIQUE` (`UserId` ASC)
); 

CREATE TABLE Profile 
( 
    UserId INT(11) NOT NULL, 
    Firstname VARCHAR(50) NULL, 
    Lastname VARCHAR(50) NULL,
    FOREIGN KEY (UserId) REFERENCES User (UserId) 
)

CREATE TABLE ProfilePicture 
( 
    UserId INT(11) NOT NULL, 
    Picture image NULL, 
    insertdate date NULL,

    FOREIGN KEY (UserId) REFERENCES User (UserId) 
)

我知道我必须使用扳机,但我不明白该怎么做。

3 个答案:

答案 0 :(得分:1)

我假设您使用存储过程或原始查询执行此操作。这可以通过使用 OUTPUT 子句来实现。

  1. 使用列Id

    定义本地表
    DECLARE @OutputTbl TABLE (ID INT)
    
  2. 现在,当您保存用户,然后将新的gnerated id插入@OutputTbl

    INSERT INTO User (Username, Password)
    OUTPUT INSERTED.UserId INTO @OutputTbl(ID)
    VALUES ('name', 'password')
    
  3. 现在,当您在Profile / ProfilePicture中需要此ID时,请从本地表中获取此ID

    insert into Profile ( 
    UserId , 
    Firstname, 
    Lastname) Values ((Select ID from @OutputTbl),'fName','lName')
    

答案 1 :(得分:0)

您可以尝试以下内容:

sudo mongod --directoryperdb --dbpath /usr/local/Cellar/mongodb/3.2.6/data/db --logpath /usr/local/Cellar/mongodb/3.2.6/log/mongodb.log --logappend -rest

如果您在同一个SP中执行这些插入,那么您可以使用,确保UserId是一个标识列:

2016-06-08T14:45:06.970+0200 I CONTROL  [initandlisten] MongoDB starting : pid=8107 port=27017 dbpath=/data/db 64-bit host=iMac-Krystyna-2.local
2016-06-08T14:45:06.970+0200 I CONTROL  [initandlisten] db version v3.2.6
2016-06-08T14:45:06.970+0200 I CONTROL  [initandlisten] git version: 05552b562c7a0b3143a729aaa0838e558dc49b25
2016-06-08T14:45:06.970+0200 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.2h  3 May 2016
2016-06-08T14:45:06.970+0200 I CONTROL  [initandlisten] allocator: system
2016-06-08T14:45:06.970+0200 I CONTROL  [initandlisten] modules: none
2016-06-08T14:45:06.970+0200 I CONTROL  [initandlisten] build environment:
2016-06-08T14:45:06.970+0200 I CONTROL  [initandlisten]     distarch: x86_64
2016-06-08T14:45:06.970+0200 I CONTROL  [initandlisten]     target_arch: x86_64
2016-06-08T14:45:06.970+0200 I CONTROL  [initandlisten] options: {}
2016-06-08T14:45:06.970+0200 I STORAGE  [initandlisten] exception in initAndListen: 29 Data directory /data/db not found., terminating
2016-06-08T14:45:06.970+0200 I CONTROL  [initandlisten] dbexit:  rc: 100

答案 2 :(得分:0)

你可以在插入表后,调用SCOPE_IDENTITY()函数,获取最新的 插入身份

了解更多信息,请参阅: https://msdn.microsoft.com/en-us/library/ms190315.aspx http://www.codeproject.com/Articles/103610/Difference-between-IDENTITY-SCOPE-IDENTITY-IDENT-C

相关问题