Как использовать одну таблицу базы данных для другой хранимой процедуры базы данных, динамически передавать имя базы данных - PullRequest
0 голосов
/ 21 декабря 2011

Теперь я обычно использую одну таблицу базы данных в другой хранимой процедуре базы данных (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 now

Тот же запрос передает имя базы данных динамически

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 Ответ

1 голос
/ 21 декабря 2011

Ответ проще, чем вы думаете. Для этого вы должны использовать Динамический 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).

...