Db Name作为存储过程SQL Server中的参数

时间:2015-06-19 22:30:04

标签: sql sql-server database where-clause

我希望将我的数据库名称作为参数传递给存储过程,我希望在where条件中使用它来设置存储过程的数据库。但是我收到了一个错误:

  

'。'

附近的语法不正确

示例代码

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

有人可以建议我如何解决这个问题吗?

1 个答案:

答案 0 :(得分: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注入攻击。