2014-04-23 27 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