Sql2000 存储过程问题,奇妙啊!

来源:百度知道 编辑:UC知道 时间:2024/05/28 04:44:14
过程如下:语法正确
CREATE PROCEDURE TestCost
@TbName varchar(225),
@SqlWhere varchar(225),
@PageSize int ,
@Num Int output
AS
Begin
Declare @SqlStr varchar(225)
Declare @Id int
if @SqlWhere!=' '
begin
Set @SqlStr= 'select top ' + str(@PageSize) + ' * From ['+@TbName+'] Where ' +@SqlWhere
end
else
begin
--Set @SqlStr=' Select Top' +str(@PageSize)+ ' * From '+@TbName+' '
Set @SqlStr=' Select Max(CostId) From '+@TbName+' '

end
exec ('Select @Id=('+@SqlStr+')')
if @Id<>null
begin
Select @Num=@Id
end
else
begin
Select @Num=0
end
End
GO

调用过程如下:
declare @Num Int
Exec TestCost 'Cost','',5,@N

注意--!!标记:

ALTER PROCEDURE TestCost
@TbName varchar(225),
@SqlWhere varchar(225),
@PageSize int ,
@Num Int output
AS
Begin
Declare @SqlStr nvarchar(225) --!!
Declare @Id int
if @SqlWhere!=''
begin
Set @SqlStr= 'select top ' + str(@PageSize) + ' * From ['+@TbName+'] Where ' +@SqlWhere
end
else
begin
--Set @SqlStr=' Select Top' +str(@PageSize)+ ' * From '+@TbName+' '
Set @SqlStr=' Select Max(CostId) From '+@TbName+' '

end
SET @SqlStr='Select @Id=('+@SqlStr+')'
exec sp_executesql @SqlStr,N'@ID INT OUTPUT',@ID OUTPUT --!!

if @Id<>null
begin
Select @Num=@Id
end
else
begin
Select @Num=0
end
End
GO

不清楚了