我現在使用INFORMATION_SCHEMA.PARAMETERS
來獲取有關存儲過程參數的信息。我需要知道參數的默認值。是否有解決方案獲取給定存儲過程的參數的默認值?是否有解決方案來獲取給定存儲過程的參數的默認值?
2
A
回答
4
解析SQL代碼,如果你是通過SQL命令這樣做......
的信息不存儲在系統表。從sys.parameters(在你期望它),has_default_value和DEFAULT_VALUE列,我們被告知要解析SQL:
SQL Server只保留默認值在此目錄視圖CLR對象;因此,對於Transact-SQL對象,此列的值爲0。要查看Transact-SQL對象中參數的默認值,請查詢sys.sql_modules目錄視圖的定義列,或使用OBJECT_DEFINITION系統函數。
如果has_default_value爲1,則此列的值爲該參數的默認值;否則,NULL。
證明:
CREATE PROC dbo.Paramtest (@foo int = 42)
AS
SET NOCOUNT ON;
GO
SELECT OBJECT_NAME(object_id), has_default_value, default_value
FROM sys.parameters
WHERE name = '@foo' AND object_id = OBJECT_ID('dbo.Paramtest')
-- gives Paramtest, 0, NULL
+0
如果有人發佈解析代碼,當然;-) –
0
Declare @pSProcName NVARCHAR(MAX)='ProcedureName'
DECLARE @SQLTEXT NVARCHAR(MAX),@start int ,@end int,@SearchCode NVARCHAR(MAX)
SELECT @SQLTEXT =OBJECT_DEFINITION(OBJECT_ID(@pSProcName))
SELECT @start=CHARINDEX('@',@SQLTEXT,1)
SELECT @end =min(val) FROM (
SELECT PATINDEX('%'+CHAR(10)+'AS'+CHAR(10)+'%',@SQLTEXT) AS val
UNION ALL SELECT PATINDEX('%'+CHAR(10)+'AS'+CHAR(13)+'%',@SQLTEXT)
UNION ALL SELECT PATINDEX('%'+CHAR(13)+'AS'+CHAR(10)+'%',@SQLTEXT)
UNION ALL SELECT PATINDEX('%'+CHAR(13)+'AS'+CHAR(13)+'%',@SQLTEXT)
UNION ALL SELECT PATINDEX('%'+CHAR(10)+'AS'+CHAR(32)+'%',@SQLTEXT)
UNION ALL SELECT PATINDEX('%'+CHAR(32)+'AS'+CHAR(10)+'%',@SQLTEXT)
UNION ALL SELECT PATINDEX('%'+CHAR(32)+'AS'+CHAR(32)+'%',@SQLTEXT)
UNION ALL SELECT PATINDEX('%'+CHAR(13)+'AS'+CHAR(32)+'%',@SQLTEXT)
UNION ALL SELECT PATINDEX('%'+CHAR(32)+'AS'+CHAR(13)+'%',@SQLTEXT)
) S
Where s.val <> 0
SELECT @SearchCode=SUBSTRING(@sqltext,@start,@end - @start)
SELECT S2.parameter_id,S2.ParameterName,S2.DataType,S1.Default_Value FROM
(
SELECT CASE WHEN Data like '%=%' then RIGHT(Data,len(Data)-CHARINDEX('=',Data,1)) ELSE '' END as Default_Value,
CASE WHEN Data like '%=%' then 1 ELSE 0 END as Has_default_Value
,Data FROM(
SELECT LTRIM(RTRIM(Split.a.value('.', 'VARCHAR(100)'))) AS Data
FROM
(
SELECT CAST ('<M>' + REPLACE(@SearchCode, ',', '</M><M>') + '</M>' AS XML) AS Data
) AS A CROSS APPLY Data.nodes ('/M') AS Split(a))s
)S1
INNER JOIN
(
Select p.parameter_id,p.name as ParameterName,UPPER(t.name) AS DataType from sys.all_parameters p
Inner JOIN sys.types t
on t.user_type_id = p.user_type_id
where Object_name(OBJECT_ID) = @pSProcName
) S2
ON S1.Data LIKE '%'+S2.ParameterName+'%'+S2.DataType+'%'
相關問題
- 1. SQL存儲過程「默認參數值」
- 2. 如何確定SQL Server存儲過程參數是否具有默認值?
- 3. 存儲過程中可選參數的最佳解決方案
- 4. SQL Server存儲過程解決方案
- 5. SQLCLR具有可選參數/默認值的存儲過程
- 6. 是否有任何信息獲取存儲過程輸入參數的默認值?
- 7. 是否有可能有一個MySQL存儲過程的默認參數?
- 8. 我的緩存解決方案解決方案是否安全?
- 9. 獲取解決方案中所有方法參數的方法
- 10. 存儲過程默認值
- 11. 存儲過程默認值
- 12. 解決方案Visual C#2010的自定義默認參考
- 13. 如何在java中獲取存儲過程參數的默認值
- 14. 解決方案而不是SQL Server 2008中的存儲過程
- 15. 存儲過程默認參數標識
- 16. 通過將值數組傳遞給存儲過程參數來獲取記錄的正確方法是什麼?
- 17. 我可以通過解決方案配置設置SSRS參數默認值嗎?
- 18. django從數據庫存儲過程獲取默認值
- 19. 是否有腳本解決方案來確定Mac上文件的默認應用程序路徑?
- 20. SQL Server 2008存儲過程中的默認參數值
- 21. 存儲過程可選參數的默認值分配
- 22. SQL Server 2008存儲過程中的默認參數值
- 23. 存儲過程的默認返回值
- 24. 存儲過程是否存在沒有給出正確答案
- 25. Oracle存儲過程來獲得給定參數
- 26. C#默認參數解決方法
- 27. 獲取存儲過程的參數
- 28. 獲取存儲過程的參數
- 29. 從存儲過程獲取默認返回值?
- 30. Apache Solr中是否有MySQL的存儲過程替代方案?
你能解釋一下你爲什麼需要這個? –
我想在我的動態C#代碼中傳遞參數值,我需要驗證。 –
那麼你需要通過c#的默認值呢? – gbn