我想刪除模式中的所有函數,並且我不想寫一些需要我提前獲取所有函數名稱的東西,並將其寫入SQL將變量作爲函數名刪除Sql函數
DROP FUNCTION MySchema.FunctionName1
DROP FUNCTION MySchema.FunctionName2
... etc
我想:
DECLARE @FuncName varchar(100)
WHILE (SELECT Count(*) From information_schema.routines
WHERE SPECIFIC_SCHEMA = 'MySchema' AND ROUTINE_TYPE = 'function') > 0
BEGIN
SELECT top(1) @FuncName = ROUTINE_NAME FROM information_schema.routines
WHERE SPECIFIC_SCHEMA = 'MySchema' AND ROUTINE_TYPE = 'function'
BEGIN
DROP FUNCTION @FuncName -- it doesn't like it because it is a string variable
END
END
sql script to drop old versions of stored procedures and functions 是有點類似,但只生成SQL像第一個例子,並不實際運行
你正在尋找的技術被稱爲[動態SQL](https://msdn.microsoft.com/en-us/library/ms709342(v = vs.85).aspx)。請特別小心,以確保[動態代碼安全](https://msdn.microsoft.com/zh-cn/library/bb669091(v = vs.110).aspx)。此技術可以打開[SQL注入漏洞](https://msdn.microsoft.com/en-us/library/ms161953%28v=sql.105%29.aspx)。 –
除非一個函數已經被放到數據庫(由授權或未授權的人),並且它被稱爲「MySchema.FunctionName GO DROP TABLE用戶」或者一些同樣荒謬的東西,我沒有看到那個評論試圖告訴我什麼 – ono2012