2014-01-07 4 views
1

Я создаю хранимую процедуру с динамическим именем db. Но я не могу заставить его работать после того, как я задать параметрыSQL Server: имя динамической базы данных в хранимой процедуре

@BatchStartTime = N'2013/12/26 15:00:00', 
@BatchEndTime = N'2013/12/26 15:30:00', 
@DBName = N'MYDATABASE' 

Вот мой пример кода:

ALTER PROCEDURE [dbo].[newSpMurexTest] 
    @BatchStartTime AS VARCHAR(30), 
    @BatchEndTime AS VARCHAR(30), 
    @DBName AS VARCHAR(30) 
AS BEGIN 
     declare @vwAllTrans nvarchar(max) 

     set @vwAllTrans = N'select T.fin_payAmt, C.fin_midAmt, C.myr_equivalent from '+ QUOTENAME(@DBName) +'.dbo.tbl_transaction_history as H 
         inner join '+ QUOTENAME(@DBName) + '.dbo.tbl_transaction_cancellation as C on H.transaction_id = C.trans_id 
         inner join '+ QUOTENAME(@DBName) +'.dbo.tbl_transaction as T on H.transaction_id = T.transaction_id 
         where H.dt_last_chg >= @BatchStartTime H.dt_last_chg <= @BatchEndTime and (H.new_status IN (7))' 

    EXECUTE sp_executesql @vwAllTrans 
          ,'@BatchStartTime AS VARCHAR(30), @BatchEndTime AS VARCHAR(30)' 
          , @BatchStartTime, @BatchEndTime 
END 

Я могу выполнить запрос, если я удалить @vwAllTrans, непосредственно выбрать его и заменить @dbname, @BatchStartTime и @BatchEndTime .. я испортил запрос, когда он положил его под @vwAllTrans и выполнил его?

+0

Этот сервер mysql или sql? –

+0

Возможно ли, что ваш BatchStartTime, BatchEndTime или DBName имеет значение NULL? – PeterRing

+0

нет, у меня есть проверка того, что BatchStartTime, BatchEndTime или DBName не является нулевым. Это сервер Microsoft SQL Server – user2085499

ответ

4
ALTER PROCEDURE [dbo].[newSpMurexTest] 
@BatchStartTime AS NVARCHAR(30), 
@BatchEndTime AS NVARCHAR(30), 
@DBName   AS NVARCHAR(30) 

AS 
BEGIN 
    SET NOCOUNT ON; 

declare @vwAllTrans nvarchar(max) 
set @vwAllTrans = N'select T.fin_payAmt, C.fin_midAmt, C.myr_equivalent from '+ QUOTENAME(@DBName) + N'.dbo.tbl_transaction_history as H 
        inner join '+ QUOTENAME(@DBName) + N'.dbo.tbl_transaction_cancellation as C on H.transaction_id = C.trans_id 
        inner join '+ QUOTENAME(@DBName) + N'.dbo.tbl_transaction as T on H.transaction_id = T.transaction_id 
        where H.dt_last_chg >= @BatchStartTime AND H.dt_last_chg <= @BatchEndTime and H.new_status IN (7)' 

EXECUTE sp_executesql @vwAllTrans 
         ,N'@BatchStartTime AS NVARCHAR(30), @BatchEndTime AS NVARCHAR(30)' 
         , @BatchStartTime, @BatchEndTime 
END 

GO 
+0

Вы тестировали свой запрос, передавая жестко установленные значения, работает ли он тогда? –

+0

Запустить его Msg 214, Уровень 16, Состояние 3, Процедура sp_executesql, Строка 1 Процедура ожидает параметр '@parameters' типа 'ntext/nchar/nvarchar'. – user2085499

+0

Да M.Ali у меня есть и он работает нормально .. – user2085499

Смежные вопросы