2011-12-21 32 views
0

现在我使用一个数据库表到另一个数据库存储过程正常(database name..table name),但我已经动态传递的数据库名称怎么写存储程序请给我任何建议如何使用一个数据库表到另一个数据库的存储过程,动态传递的数据库名称

我写这样的

Select QT.Name,SC.Name as Status,QT.QuoteNumber,QT.PolicyNumber,LC.Name as LineCode,QT.DBAName as DBAName  
    from QMSV3Dev..Quote QT, QMSV3Dev..StatusCode SC, QMSV3Dev..LineCode LC  
    where QT.StatusCode = SC.StatusCode And QT.LineCode = LC.LineCode and  
    QT.DBAName like 'a%' order by QT.Name,QuoteNumber desc 

在上面的存储过程QMSV3Dev..QuoteQMSV3Dev是数据库名称和Quote是表名,这个SP像另一个数据库中执行现在

同样的查询通过数据库名称动态

CREATE Procedure [dbo].[usp_GetSearch123]  
(  
@SearchValue varchar(100),  
@SearchBy varchar(250), 
@DbName varchar(50)  
)  
AS  
Begin 
    Select QT.Name,SC.Name as Status,QT.QuoteNumber,QT.PolicyNumber,LC.Name as LineCode,QT.DBAName as DBAName   
    from @DbName+'..Quote ' QT,@DbName+'.. StatusCode' SC, @DbName+'..Linecodes' LC  
    where QT.StatusCode = SC.StatusCode And QT.LineCode = LC.LineCode and  
    (QT.Name like @SearchValue+'%' or QT.DBAName like @SearchValue+'%')  
    order by QT.Name,QuoteNumber desc 
end 

回答

1

答案是您想象中简单。对于这一点,你必须使用Dynamic SQL

这将是这样的:

CREATE Procedure [dbo].[usp_GetSearch123]  
(  
@SearchValue varchar(100),  
@SearchBy varchar(250), 
@DbName varchar(50)  
)  
AS  
Begin 

    Declare @cmd varchar(5000) 

    select @cmd = 
    'Select QT.Name,SC.Name as Status,QT.QuoteNumber,QT.PolicyNumber,LC.Name as LineCode,QT.DBAName as DBAName   
    from ' + @DbName + '..Quote QT, ' + @DbName + '.. StatusCode SC, ' + @DbName+'..Linecodes LC  
    where QT.StatusCode = SC.StatusCode And QT.LineCode = LC.LineCode and  
    (QT.Name like "' + @SearchValue + '%" or QT.DBAName like "' + @SearchValue +'%")  
    order by QT.Name,QuoteNumber desc' 

    exec(@cmd) 
end 

您创建一个varchar变量@cmd,把选择它,事后exec(@cmd)执行它。

+0

它不工作错误消息102,级别15,状态1,过程usp_GetSearch123,12号线 附近有语法错误 'QT'。 – hmk 2011-12-21 10:22:58

+0

@hmkmudiam我editted我的答案,你可能会再试一次。 – 2011-12-21 10:26:03

+0

成功,但在执行EXEC usp_GetSearch123 'A' 创建, '', 'QMSV3Dev' 错误消息208,级别16,状态1,行1 无效的对象名称QMSV3Dev..StatusCodes“。请检查 – hmk 2011-12-21 10:33:01

相关问题