2012-10-08 165 views
0

我有一個創建一個用戶配置文件的存儲過程,我的形式有以下字段:存儲過程

FirstName, 
LastName. 
EmailAddress, 
ZipCode, 
Password 

的郵政編碼是一個FK在我喜歡的類型的用戶配置SMALLINT值可能會或可能不會已經在表格中存在名爲Location

LocationId bigInt (identity index) 
ZipCode smallint 

有沒有從我的存儲過程中的方式來查詢該表,如果該項目存在使用了PK在我的存儲過程中輸入?

這也是迄今爲止

CREATE PROCEDURE [dbo].[SP_InsertInitialProfile] 

@FirstName   NVARCHAR(1000), 
@LastName   NVARCHAR(1000), 
@EmailAddress  NVARCHAR(1000), 
@ZipCode   SMALLINT, 
@Password   NVARCHAR(1000) 

AS 

IF (SELECT COUNT(1) FROM UserProfile WHERE EmailAddress [email protected]) = 1 
BEGIN 
    RETURN -1 
END ELSE 
BEGIN 
    INSERT INTO UserProfile(FirstName,LastName,EmailAddress,Password) 
    VALUES(@FirstName,@LastName,@EmailAddress,@Password) 

    RETURN Cast(@@IDENTITY as INT) 
END 

回答

1

你可以做SP像這樣我的存儲過程:

  CREATE PROCEDURE [dbo].[SP_InsertInitialProfile] 

      @FirstName   NVARCHAR(1000), 
      @LastName   NVARCHAR(1000), 
      @EmailAddress  NVARCHAR(1000), 
      @ZipCode   SMALLINT, 
      @Password   NVARCHAR(1000) 

      AS 

      varCountNbr number; 

      BEGIN 

       SELECT COUNT(1) INTO varCountNbr 
       FROM 
        Location 
       WHERE 
       [email protected]; 

       IF varCountNbr = 0 
        INSERT @ZipCode INTO Location TABLE; 
       -- You have to commit here, in order to have the PK value exists. 
        COMMIT; 

       INSERT INTO USERPROFILE TABLE; 

       COMMIT; 


      END; 
+0

我期待查詢位置表,而不是試圖找出如果用戶已經註冊用這封電子郵件 – Pacman

+0

然後只需在您的SP中查詢您的位置表以獲得計數結果,然後您可以根據返回的計數編號進行插入或不插入。 –

+0

如果該項目存在於其他表中,我正在尋找PK,如果它不是我必須將其添加到該表中,則獲取PK並將其用於SP在用戶配置文件中插入 – Pacman