【问题标题】:How to use the one database table to another database stored procedure, dynamically pass the database name如何使用一个数据库表到另一个数据库存储过程,动态传递数据库名称
【发布时间】:2011-12-21 10:08:52
【问题描述】:

现在我将一个数据库表正常使用到另一个数据库存储过程(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..Quote中,QMSV3Dev是数据库名,Quote是表名,这个sp现在在另一个数据库如test中执行

同一查询动态传递数据库名称

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 

【问题讨论】:

    标签: sql-server-2008 stored-procedures asp.net-4.0


    【解决方案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) 执行它。

    【讨论】:

    • 它不工作错误是 Msg 102, Level 15, State 1, Procedure usp_GetSearch123, Line 12 'QT'附近的语法错误。
    • 创建成功但在执行中执行 exec usp_GetSearch123 'a','','QMSV3Dev' 错误是 Msg 208, Level 16, State 1, Line 1 Invalid object name 'QMSV3Dev..StatusCodes'。请检查一下
    • @hmkmudiam 数据库 QMSV3Dev 中有一个表 StatusCodes 吗?有数据库 QMSV3Dev 吗?根据您的代码,该表似乎是 StatusCode。我已经改了,再试一次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    相关资源
    最近更新 更多