使用环境 SQL SERVER 2005测试代码 
      declare @DataBaseName  nvarchar(20);
      SET @DataBaseName='RH'      SELECT *
      FROM   @DataBaseName+'.dbo.INVMB'错误提示:
Incorrect syntax near '+'.因为经常需要使用不同的数据库,所以想在存储过程中
 EXEC ‘RH’ 或 EXEC ‘LOOS’    直接修改数据库就很简单了   
请问该怎样修改才能实现  

解决方案 »

  1.   

      declare @DataBaseName nvarchar(20);
      SET @DataBaseName='RH'  exec('SELECT * FROM ' + @DataBaseName + '.dbo.INVMB')当数据库名,表名,列名为变量时,需要拼接SQL,动态执行之.
      

  2.   


      declare @DataBaseName nvarchar(20),@sql varchar(2000)
      SET @DataBaseName='RH' set @sql='SELECT * FROM '+@DataBaseName+'.dbo.INVMB'
     print @sql  ---SELECT * FROM RH.dbo.INVMB
      

  3.   

    exec(‘SELECT *
      FROM ’+@DataBaseName+'+'.dbo.INVMB')
      

  4.   

    谢谢兄弟们的回复,我也将自己写的代码共享下,希望对别的朋友有帮助:
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    go/* 查询显示辅料报表 4,5,6 字头   使用部门:工程部 
    sp_helptext [ENGQUERY] --显示用于在多行中创建对象的定义:内容
    sp_help [ENGQUERY]     --显示用于在多行中创建对象的定义,如参数等
    drop proc [ENGQUERY]   --删除报表
     
    exec [ENGQUERY]   'RH','6'
    能在存储过程中直接插入 EXEC 命令当然可以调用存储过程
    */ALTER PROCEDURE [dbo].[ENGQUERY]
       @DataBaseName nvarchar(20),
       @NUM NVARCHAR(8)
    as
    create table #ENGQUERY(品号 nvarchar(20),品名 nvarchar(60),规格 varchar(60),单位 VARCHAR(4),
             采购单位  nvarchar(8),计价单位 nvarchar(8),主要仓库 nvarchar (8)
    )
      begin
      declare @sql   nvarchar(200)
      set @sql='SELECT MB001,MB002,MB003,MB004,MB148,MB149,MB017 FROM '+@DataBaseName+'.dbo.INVMB where MB001 LIKE '+''''+@NUM+'%'''
    -- print @sql  ---SELECT * FROM RH.dbo.INVMB
    INSERT INTO #ENGQUERY
     -----调用SQL语句
    EXEC  (@sql)
    ----调用存储过程  AAA 存储过程如下
    ----EXEC  AAAend 
    SELECT 品号, dbo.F_Gb2Big(品名,1) as 品名, dbo.F_Gb2Big(规格,1) as 规格,dbo.F_Gb2Big(单位,1) as 库存单位, dbo.F_Gb2Big(采购单位,1) as 采购单位, dbo.F_Gb2Big(计价单位,1) as 计价单位,主要仓库 FROM #ENGQUERY
    DROP TABLE #ENGQUERY/*
    /*EXEC AAA*/
    ALTER PROCEDURE AAA 

    AS
    BEGIN

    SELECT MB001,MB002,MB003,MB004,MB148,MB149,MB017 FROM RH.dbo.INVMB where MB001 LIKE '6%'
    END*/