2015-04-13 2 views
-1
CREATE PROCEDURE dbo.sp_data_archive 
(
    @DataBaseName varchar(100), 
) 

AS 
BEGIN 


    INSERT INTO [@DataBaseName].dbo.TESTTABLE 
    INSERT INTO dbo.TestTable 

END 

Ошибка при передаче: Недопустимое имя объекта '@ DataBaseName.dbo.TESTTABLE'.Как использовать переменную имени базы данных внутри хранимой процедуры?

Как это решить?

+1

Для этого вам может потребоваться sp_executesql. Передайте свою строку sql в executesql, а затем попробуйте выполнить ее. –

+0

Вы можете привести пример? –

+0

Избегайте использования префикса sp_ при процедурах именования. Этот префикс используется SQL Server для обозначения системных процедур. – ughai

ответ

0

Вы должны использовать sp_executesql для этой цели

Для справки, проверить код, указанный ниже.

alter procedure test_Sp 
(
    @DBName1 nvarchar(100), 
    @DBName2 nvarchar(100) 
) 
as 
begin 

    DECLARE @sql NVARCHAR(500) 
    SET @sql = N'select * from ' + @DBName1 + '.sys.tables' 
    EXEC SP_EXECUTESQL @SQL      
    SET @sql = N'select * from ' + @DBName2 + '.sys.tables' 
    EXEC SP_EXECUTESQL @SQL 

end