我是个新手,学习使用存储过程中遇到个问题,不知道怎么办.
问题如下, 我建立了一个存储过程. 定义了变量 @ny, 然后我的存储过程中有一个这样的查询语句:
select * from tb201104_heji,
这样tb201104_heji 是一个表明. 我想通过前台传递过来的@ny来动态的替换查询内容,如果前台传递
过来201101给@ny, 那这个储存过程应该就查询tb201101的表,但是不是不知道这个表变量的格式该
怎么写, tb@ny_heji  这样写是错误的吧?请高手解答...谢谢.

解决方案 »

  1.   

    declare @sql varchar(8000)set @sql='select * from [tb'+ltrim(rtrim(@ny))+'_heji]'exec (@sql)
      

  2.   


    declare @ny varchar(100)
    declare @sql varchar(8000)
    set @ny = '201104'
    set @sql = 'select * from tb' + @ny + '_heji'
    exec(@sql)
      

  3.   

    表名是动态的就只能拼接动态sql执行
      

  4.   

    declare @ny varchar(100)
    declare @sql varchar(8000)
    set @ny = '201104'
    set @sql = 'select * from tb' + ltrim(@ny) + '_heji'
    exec(@sql)
      

  5.   

    下面是我存储过程。如果我不想上楼上那样定义@sql,就按我下面的方式去写? 可以做吗?CREATE PROCEDURE dbo.cx 
    @ny varchar(9) AS
    set nocount on
        begin
    select * from tb@ny_heji
    end
    go
      

  6.   

    动态参数的存储过程示例--1. 使用 EXEC 实现的动态参数存储过程
    CREATE PROC p_test
    @para1 varchar(10)=null,
    @para2 varchar(10)=null,
    @para3 varchar(10)=null,
    @para4 varchar(10)=null
    AS
    SET NOCOUNT ON
    DECLARE @sql varchar(8000)
    SET @sql='SELECT * FROM tbname WHERE 1=1'
    IF @para1 IS NOT NULL
    SET @sql=@sql+' AND col1='''+@para1+''''
    IF @para2 IS NOT NULL
    SET @sql=@sql+' AND col2='''+@para2+''''
    IF @para3 IS NOT NULL
    SET @sql=@sql+' AND col3='''+@para3+''''
    IF @para4 IS NOT NULL
    SET @sql=@sql+' AND col4='''+@para4+''''
    EXEC(@sql)
    GO
    /*======================================================*/--2. 使用 sp_executesql 实现的动态参数存储过程
    CREATE PROC p_test
    @para1 varchar(10)=null,
    @para2 datetime=null,
    @para3 varchar(10)=null,
    @para4 int=null
    AS
    SET NOCOUNT ON
    DECLARE @sql nvarchar(4000)
    SET @sql='SELECT * FROM tbname WHERE 1=1'
    +CASE WHEN @para1 IS NULL THEN '' ELSE ' AND col1=@para1' END
    +CASE WHEN @para2 IS NULL THEN '' ELSE ' AND col2=@para2' END
    +CASE WHEN @para3 IS NULL THEN '' ELSE ' AND col3=@para3' END
    +CASE WHEN @para4 IS NULL THEN '' ELSE ' AND col4=@para4' END
    EXEC sp_executesql @sql,N'
    @para1 varchar(10)=null,
    @para2 datetime=null,
    @para3 varchar(10)=null,
    @para4 int=null
    ',@para1,@para2,@para3,@para4
    GO
    /*======================================================*/--3. 不使用动态 Transact-SQL 语句实现的动态参数存储过程
    CREATE PROC p_test
    @para1 varchar(10)=null,
    @para2 datetime=null,
    @para3 varchar(10)=null,
    @para4 int=null
    AS
    SET NOCOUNT ON
    SELECT * FROM tbname 
    WHERE (@para1 IS NULL OR col1=@para1)
    AND (@para2 IS NULL OR col2=@para2)
    AND (@para3 IS NULL OR col3=@para3)
    AND (@para4 IS NULL OR col4=@para4)