2011-12-21 34 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

相關問題