2016-06-08 97 views
1

我有3个表User,ProfileProfilePictureProfileProfilePictureUser表具有外键关系。我在这里要做的是每当我通过web应用程序向User表中插入数据时,他们的AutoGeneratedID获取并插入到ProfileProfilePicture表中。获取自动增量ID并插入到外键表中

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) 
) 

我知道我必须使用触发器,但我不明白如何做到这一点。

+0

使用输出中并插入 –

+0

降反引号(') - 这些都是*不*必要在SQL Server/T-SQL ... –

+0

你使用SQL Server标记这一点,但语法看起来像MySQL的。你有反引号和AUTO_INCREMENT。你实际使用哪种DBMS? –

回答

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. 当你需要这个id在Profile/ProfilePicture中,从本地表获得此ID

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

OUTPUT Inserted.userId到@OutputTbl(ID)什么是@OutputTbl(ID)'我必须创建表 – Sri

+0

不需要创建表它只是表值参数,它会在内存中 –

+0

@斯里兰卡更多关于表变量请按照http://odetocode.com/articles/365.aspx –

0

你可以尝试如下的内容:

CREATE TABLE #tempUser(
    UserId INT, 
    ShopRef INT 
) 


INSERT INTO [User] (UserPassword,Name,MobileNo,Gender,Dob,Country,State,City,StreetAddress 
        ,ZipCode,IsActive 
        ,CreatedDate,ModifiedBy,CreatedBy,IsAdmin,EmailOtp,UserImage,Rating 
        ,ContactNo) 
      OUTPUT inserted.UserId, inserted.EmailOtp INTO #tempUser 
      SELECT 'NA', [Name], [MobileNo], '-','1900-01-01',[Country],[State],[City],[StreetAddress],  
        [ZipCode], 1 
        ,@Date,@UserId,@UserId,0,ID,'NA',0 
        ,'NA' 
      FROM #temp WHERE Status ='SUCCESS' 

如果在同一个SP执行这些刀片然后就可以使用,确保用户ID是标识列:

SET @UserId = SCOPE_IDENTITY() 
+0

我必须创建这个表'#tempUser'所以我必须创建。并且可以在我的存储过程中使用您的代码 – Sri

+0

是的,您将不得不创建#temp表。不,你不能使用我的代码,这只是供参考。您需要根据您的需求进行修改。 – user3151766