2014-04-23 56 views
0

我有2個表藝術和藝術家。我已經編寫了artistId是外鍵的藝術存儲過程。用於表藝術插入數據過程如下:如何使用sql server的存儲過程中的外鍵

create procedure spInsertArts(
    @artsId int out, 
    @name varchar(50), 
    @category varchar(50), 
    @artistId int 
    ) 
    as 
      begin 
     select @artistId=SCOPE_IDENTITY() 
      if exists(select artistId from artist) 
       insert into arts(name,category,artistId) values(@name,@category,@artistId) 
      end 

當我執行它,它給誤差爲:

過程或函數「spInsertArts」預計參數`@artistId」,這是不提供。

我想設置artistId在藝術家表artistId的最新值。

回答

0

如果一個參數是可選的,您需要提供一個默認值:

create procedure spInsertArts(
    @artsId int out, 
    @name varchar(50), 
    @category varchar(50), 
    @artistId int = null 
    ) 

但爲什麼連一個參數,如果你只是重寫值反正?

此外,我不確定確定「最新」ID屬於這裏。如果來電者正在插入藝術家,然後轉身插入藝術,則讓來電者提供artistId。否則,只有在插入藝術家後(並且在同一連接上),您纔可以插入藝術的時間。

+0

它不是可有可無的,它總是被覆蓋, – NimChimpsky

+0

實際上它是像「第一藝術家準備註冊人和藝術家ID將會在每個藝術家那裏出現,當藝術家在我的藝術桌上發佈藝術信息時,藝術家ID應該被插入到藝術表中。 – user3202311

1

如果artistId始終是藝術家表中artistId的最新值,那麼爲什麼您需要它作爲參數?

你可以聲明它作爲一個局部變量是這樣的:

DECLARE @artistId INT 
SET @artistId = ... 

,並獲得最新artistId相應

+0

藝術家是另一張桌子,藝術家將註冊,他將獲得ID。然後在第二頁上他會插入藝術信息。即我的藝術桌。我想讓藝術家插入藝術桌。 – user3202311