200分求改一存储过程的错误,并说明

来源:百度知道 编辑:UC知道 时间:2024/06/15 01:39:04
小弟新学,请各位大虾指正。

CREATE PROCEDURE newstock_add(
@Tb varchar(50),
@UserId int,
@PartNo varchar(100),
@Brand varchar(100),
@DateCode varchar(100),
@Quantity varchar(100),
@Price varchar(100),
@Package varchar(100),
@Note varchar(100)
)
AS

if not exists Exec( ' SELECT top 1 * FROM ' + @Tb + ' where PartNo= ' + @PartNo + ' and userid= ' + @userid + ' order by partno ' )
begin
Insert into @Tb (UserId,PartNo,Brand,DateCode,Quantity,Price,Package,Note)
values(@UserId,@PartNo,@Brand,@DateCode,@Quantity,@Price,@Package,@Note)
end
else
begin
update @Tb set Brand=@Brand,DateCode=@DateCode,Quantity=@Quantity,Price=@Price,Package=@Package,Note=@Note where PartNo=@PartNo and userid=@userid
end
GO
问题的关键就是提示出错
好不容易看到个人写代码出来
结果实在是太失望了
拿GOOGLE给我翻译 ,你也太有才了 哥们
提示 @Tb变量未声明

你要declare @tb table(这里面写你所要的列)

比如 declare @tablename table(int id,name varchar(100))

@tb其实是一个表变量,你要使用的话应该先定义
改成

你的@tb 在存储过程中的变量中已经有了额,我不知道你的@tb是不是表的名称,如果是那样的话你就要拼接sql字符串了 请你把你的问题说清楚一点

newstock_add 'asdfs',1,'a','a','a','a','a','a','a'

alter PROCEDURE newstock_add(
@Tb varchar(50),
@UserId int,
@PartNo varchar(100),
@Brand varchar(100),
@DateCode varchar(100),
@Quantity varchar(100),
@Price varchar(100),
@Package varchar(100),
@Note varchar(100)
)
AS
declare @sql varchar(8000)
set @sql='if not exists( SELECT top 1 * FROM ' + @Tb + ' where PartNo= '+ @PartNo + ' and userid= ' + cast(@userid as varchar(10))+ ' order by partno )
begin
Insert into '+@Tb+ '(UserId,PartNo,Brand,DateCode,Quantity,Price,Package,Note)
values('+cas