拥有这样的简单存储过程:
CREATE PROCEDURE [dbo].[ProcedureName]
@p1IntMandatory INT ,
@p2IntDefValueZero INT = 0 ,
@p3VarcharWzValue VARCHAR(MAX) = 'abc' ,
@p4DateTimeNullable DATETIME = NULL ,
@p5IntOutWzValueZero INT = 0 OUTPUT
AS
BEGIN
SET NOCOUNT ON;
END;
当运行此语句以获取存储过程参数元数据时,特别是“has_default_value”,“default_value”和“is_nullable”列,我发现它们的值无效。
SELECT *
FROM sys.parameters
WHERE object_id = OBJECT_ID('[dbo].[ProcedureName]');
结果如下:
name has_default_value default_value is_nullable
@p1IntMandatory 0 NULL 1
@p2IntDefValueZero 0 NULL 1
@p3VarcharWzValue 0 NULL 1
@p4DateTimeNullable 0 NULL 1
@p5IntOutWzValueZero 0 NULL 1
是否有正确的方法来获取有关存储过程的有效元数据,特别是这3列?
答案 0 :(得分:0)
这里有一半开始为你做黑客攻击。这不是一个解决方案,但是评论太长了,但也许会让你开始。这是尝试将您的程序创建提取到' as'。
SELECT
--charindex('create proc',[definition]) as SubstringStartLocation
--,charindex('as',substring([definition],charindex('create proc',[definition]),len([definition]))) SubStringLength
substring([definition],charindex('create proc',[definition]),charindex('as',substring([definition],charindex('create proc',[definition]),len([definition]))) - 1) as ProcCreation
,definition as ProcDefinition
FROM sys.sql_modules
WHERE definition like '%create proc%'
然后你必须解析那个可能变得非常棘手的专栏,但希望这会有所帮助。
此处更进一步......
if object_id('tempdb..#procs') is not null drop table #procs
SELECT
--charindex('create proc',[definition]) as SubstringStartLocation
--,charindex('as',substring([definition],charindex('create proc',[definition]),len([definition]))) SubStringLength
substring([definition],charindex('create proc',[definition]),charindex('as',substring([definition],charindex('create proc',[definition]),len([definition]))) - 1) as ProcCreation
,definition as ProcDefinition
into #procs
FROM sys.sql_modules
WHERE definition like '%create proc%'
select
ProcCreation
,right(rtrim(ProcCreation),len(ProcCreation) - charindex('@',ProcCreation) + 1) as Variables
from #procs
where ProcCreation like '%@%'