Dot-Net
如何確定 SQL Server 儲存過程參數是否具有預設值?
有沒有辦法以程式方式確定 SQL Server 儲存過程參數是否具有預設值?(如果您可以確定預設值,則可以加分。) SqlCommandBuilder.DeriveParameters()甚至沒有嘗試。
在此先感謝您的幫助!
編輯:老實說,我不在乎它是 SQL 查詢、SMO 對像等。
我找到了一種使用 SMO 的方法:
Server srv; srv = new Server("ServerName"); Database db; db = srv.Databases["MyDatabase"]; var Params = db.StoredProcedures["MyStoredProc"].Parameters; foreach(StoredProcedureParameter param in Params) { Console.WriteLine(param.Name + "-" + param.DefaultValue); }
在 SQL Server 2005 及更高版本中沒什麼大不了的:
SELECT pa.NAME, t.name 'Type', pa.max_length, pa.has_default_value, pa.default_value FROM sys.parameters pa INNER JOIN sys.procedures pr ON pa.object_id = pr.object_id INNER JOIN sys.types t ON pa.system_type_id = t.system_type_id WHERE pr.Name = 'YourStoredProcName'不幸的是,即使這看起來像小菜一碟 - 它不起作用:-(
來自技術網:
SQL Server僅在此目錄視圖中維護 CLR 對象的預設 **值;**因此, 對於 Transact-SQL 對象,此列的值為 0。要查看 Transact-SQL 對像中參數的預設值,請查詢 sys.sql_modules 目錄視圖的定義列,或使用 OBJECT_DEFINITION 系統函式。
因此,您所能做的就是查詢
sys.sql_modules或呼叫SELECT object_definition(object_id)以獲取儲存過程的 SQL 定義(T-SQL 原始碼),然後您需要對其進行解析(**糟透了!!**很長時間…..)似乎真的沒有其他方法可以做到這一點……我感到驚訝和震驚……
也許在 SQL Server 2008 R2 中?:-) 馬克