ALTER Proc [dbo].[P_S_Count]
@TabName SYSNAME,
@ReturnValue INT OUTPUT
AS
SET NOCOUNT ON
EXECUTE @ReturnValue=('SELECT COUNT(*) FROM '+@TabName+'')
有错误,这么样才可以正常运行

解决方案 »

  1.   

    --try
    ALTER Proc [dbo].[P_S_Count] 
    @TabName SYSNAME, 
    @ReturnValue INT OUTPUT 
    AS 
    BEGIN
    SET NOCOUNT ON 
    DECLARE @sql NVARCHAR(1000)
    SET @sql='SELECT @ReturnValue=COUNT(*) FROM '+@TabName
    EXECUTE sp_executesql @sql,  N'@ReturnValue INT OUTPUT', @ReturnValue
    END
      

  2.   

    if object_id('P_S_Count') is not null
       drop proc P_S_Count
    go
    -- P_S_Count 'tb1'
    create Proc [dbo].[P_S_Count] 
    (@TabName SYSNAME)
    AS 
    BEGIN
        SET NOCOUNT ON 
        DECLARE @sql NVARCHAR(4000),@parms NVARCHAR(1000),@ReturnValue1 int 
        set @sql=N'SELECT @ReturnValue=COUNT(*) FROM '+@TabName
        set @parms=N'@ReturnValue int output'     EXECUTE sp_executesql 
        @sql, 
        @parms,
        @ReturnValue=@ReturnValue1 output    select @ReturnValue1
    END
    --
    这也是一种解决方法,区别就是他把输出型变量在内部定义,而外面的程序调用存储过程时,用不找再定义输出型变量
      

  3.   

    ALTER Proc [dbo].[P_S_Count] 
    @TabName SYSNAME, 
    @ReturnValue INT OUTPUT 
    AS 
    SET NOCOUNT ON declare @sql nvarchar(1000)
    set @sql='SELECT  @i=COUNT(*) FROM '+@TabNameEXECUTE  sp_executesql @sql,N'@I int output',@returnvalue output
      

  4.   

    刚才做了个小实验
    如果在存储过程中用到了EXECUTE sp_executesql,而且有输出型参数,那么执行会出错,提示找不到哪个输出型参数
    没有找到原因
      

  5.   


    ALTER Proc [dbo].[P_S_Count] 
    @TabName SYSNAME, 
    @ReturnValue INT OUTPUT 
    AS 
    SET NOCOUNT ON declare @sql nvarchar(1000)
    set @sql='SELECT  @i=COUNT(*) FROM '+@TabNameEXECUTE  sp_executesql @sql,N'@I int output',@returnvalue
    能解释下吗????也就是最后一行
      

  6.   


    ALTER Proc [dbo].[P_S_Count] 
    @TabName SYSNAME, 
    @ReturnValue INT OUTPUT 
    AS 
    SET NOCOUNT ON declare @sql nvarchar(1000)
    set @sql='SELECT  @i=COUNT(*) FROM '+@TabNameEXECUTE  sp_executesql @sql,N'@I int output',@returnvalue output --加上output