2013-09-28 3 views
0

И всем экспертам здесь .. Я новичок в хранимых процедурах.Значение параметра хранимой процедуры SQL Server как databasename

мне действительно нужна помощь, моя проблема в том, возможно ли использован параметр как имяБД

Ниже мой пример:

ALTER PROCEDURE [dbo].[SP_EventLogs] 
    (@HRTable as varchar(50)) 
AS 
BEGIN 
    Set NOCOUNT ON 

    SELECT 
     a.*,LOG_ADDBY.ADDBY 
    FROM 
     EVENT_VIEWER a 
    INNER JOIN 
     (SELECT 
      PK, (Lastname + ', ' + Firstname + ' ' + ExtName) as ADDBY 
     FROM 
      @HRTable.[dbo].[EMP_RECORDS]) LOG_ADDBY ON a.PerformBy = LOG_ADDBY.PK 
    ORDER BY 
     a.PerformDate DESC 

    Set NOCOUNT OFF 
END 

@HRTable мой параметр .. и он возвращает ошибку.

Любое предложение будет принята с благодарностью.

Спасибо ...

+1

Вы должны составить строку запроса динамически, а затем оценить (выполнить) ее. Очевидно, что вы потеряете большую часть преимуществ производительности хранимых процедур таким образом – LittleSweetSeas

ответ

1

Один из вариантов заключается в создании вид, который имеет имя таблицы внутри него и присоединиться к этому

SELECT 't1'as tableName ,col1, col2, col3,... from t1 
UNION ALL 
SELECT 't2',col1, col2, col3,... from t2 
where 
..... 
and [email protected] 

Но это на самом деле не «проделанная вещь». Вы также можете использовать динамический SQL & Exec, если вы должны это сделать, но, возможно, подумайте, делаете ли вы все, что бы вы ни делали правильным путем.

Что в разных таблицах означает, что вы не можете просто положить их в один?

0

Как я понял @HRTable - это имя вашей базы данных. Это не сработает. Вы должны использовать динамический запрос. Объявите переменную для текста запроса и установите ее для своего запроса, затем используйте Exec (@variable) для запуска текста запроса в переменной.

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