2016-06-08 98 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