2017-09-14 35 views
1

哪一種使用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

我不知道哪一個是最好的,但我知道我會主要使用什麼,這是第一條語句:)但它可以取決於我的SQL構建的東西。 – plaidDK

+0

嗯我不認爲,在你提供的例子中,它很重要。兩者都有優點和缺點。最好的? – PreQL

回答

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注入,如果有人知道DB名稱。儘管如此,您只需將其設置爲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 
相關問題