0

我需要获取分配给存储过程参数的默认值。

我可以使用 DatabaseMetaData.getProcedureColumns 获取存储过程参数的所有详细信息,但我找不到任何方法来获取过程的默认值。

例如,如果我有以下存储过程

create procedure st_test (
@param1 varchar(10),
@param2 varchar(4000),
@param3 varchar(20) = 'SOMEVALUE',
@param4 varchar(30) = 'OTHERVALUE'
@param5 varchar(4000) = NULL
)

然后我需要获取 param3、param4 & param5 的默认值,即 'SOMEVALUE'、'OTHERVALUE' & NULL

谢谢

4

2 回答 2

1

原则上,您应该能够使用DatabaseMetaData.getProcedureColumns(), field检索此值COLUMN_DEF。但是,可能并非所有驱动程序都支持这一点。

于 2012-05-02T14:32:30.403 回答
0

但是,由于以下限制,我也找不到为 SQL 服务器(我正在使用)执行此操作的最佳方法: 1. 使用本机 JDBC DatabaseMetaData.getProcedureColumns 确实返回 null :P 2. 使用仅告诉参数的 Spring 库名称和类型,但不是默认值。3. 使用上述信息将 NULL 值绑定到这些参数并没有帮助,因为这些 NULL 会覆盖默认值并对过程内部的逻辑造成灾难。

我确实写了一个程序,它返回我整个程序的签名,它是这样的:

创建过程 [dbo].[GetString](@proc_name varchar(100), @string varchar(1000) OUT) 作为 DECLARE @Val VARCHAR(MAX) 声明 @Table TABLE( Val VARCHAR(MAX) ) BEGIN INSERT INTO @Table EXEC sp_helptext @proc_name SELECT @Val = COALESCE(@Val + ' ' + Val, Val) FROM @Table select @string = @Val END

此过程返回其名称作为 In Param 传递给它的过程的签名。然后我对 String 做了一些 Ptocessing 并得到了它们的默认值。

于 2015-12-04T07:11:42.177 回答