使用数据库执行是正确的方法吗?

时间:2017-09-14 12:33:22

标签: tsql

使用execute数据库的正确方法是什么?

方法1

declare @query nvarchar(max),  
        @db varchar(100) = 'figmdhqimanagementaad'  

set @query = 'select top 100 * from  [' + @db + '].dbo.tblencounter '  

execute Sp_ExecuteSQL @query

方法2

Execute('use ' + @db + 'select top 100 * from tblencounter')

1 个答案:

答案 0 :(得分:1)

在这种情况下,我不会说有正确和错误的方式。它是动态SQL,你已经使用括号减轻了一些SQL注入购买。我会在第二个版本上使用QUOTENAME。

declare @query nvarchar(max)
declare @db varchar(100) = 'figmdhqimanagementaad'  

set @query = 'USE ' + QUOTENAME(@db) + ' select top 100 * from tblencounter'

print(@query)

但请注意,如果有人知道数据库名称,即使这是SQL注入。你已经通过使它只有一个varchar(100)来缓解这一点。您可以随时检查以确保数据库也存在。

declare @query nvarchar(max)
declare @db varchar(100) = 'figmdhqimanagementaad'  

if exists(select * from sys.databases where name = @db)
begin
    set @query = 'USE ' + QUOTENAME(@db) + ' select top 100 * from tblencounter'

    print(@query)
end