2015-06-19 6 views
0

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

Incorrect syntax near '.'

Пример кода

Create proc [dbo].[stored_procedure_one] 
    @variable1 int, 
    @dbname varchar(10) 
as 
begin 
    select * 
    from @dbname..table_name 
End 

Может кто-то предложить мне, как решить эту проблему?

ответ

4

Вам нужно будет использовать динамический SQL для этого что-то вроде этого .....

Create proc [dbo].[stored_procedure_one] 
    @variable1 int, 
    @dbname SYSNAME --<-- use appropriate data type for object names 
as 
begin 
    DECLARE @Sql NVARCHAR(MAX); 

SET @Sql = N' select * from ' + QUOTENAME(@dbname) + N'..table_name' 

Exec sp_executesql @Sql 

End 

использовать также QUOTENAME() функцию, чтобы защитить себя от возможного нападения SQL-инъекции.

+0

Да, это должно решить проблему. Вызов 'sp_executesql' не требуется. Вы также можете вызвать 'EXEC (@sql) '. – Ionic

+0

@Ионика есть дополнительная переменная в определении процедуры, я предполагаю, что это не весь код, а только часть кода, в котором проблема с OP, с использованием 'sp_executesql' позволяет использовать параметризованные запросы, поэтому sp_executesql в мой ответ :) –

+0

Ну, для параметризации это было бы нормально. ;-) – Ionic