使用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')
答案 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