我在MS SQL Server 2008中制作了一个TVP存储过程:
CREATE PROCEDURE [TVPSP] @CID INT
,@OID INT = NULL
,@GAS ParamTypeTVP readonly
,@ErrorText VARCHAR(100) OUTPUT
AS
BEGIN
select 1
RETURN
END
我还创建了一个TVP类型:
CREATE TYPE [MDF].[ParamTypeTVP] AS TABLE(
[ParamID] [int] IDENTITY(1,1) NOT NULL,
[pInt1] [int] NULL,
[pVarchar1] [varchar](777) NULL,
PRIMARY KEY CLUSTERED
(
[ParamID] ASC
)WITH (IGNORE_DUP_KEY = OFF)
)
我使用Powerbuilder内置方法生成声明,结果是:
function long TVPSP(long CID,long OID,string GAS,ref string ErrorText) RPCFUNC ALIAS FOR "TVPSP"
因此,您看到PB为TVP参数生成了一个字符串变量,该变量为false(当然,从PB调用失败)。 有可能让它以某种方式工作吗?当然我有解决方法的想法(例如使包装器sp忽略TVP参数),但我想知道如何使用TVP以这种方式工作!
提前谢谢!的Gabor
答案 0 :(得分:1)
坏消息,PB12.5文档中可能不支持它:
不支持的SQL Server 2008功能
PowerBuilder SNC接口不支持用户定义表 键入(表示表定义的用户定义类型) SQL Server 2008中引入的结构。
http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.help.pb.12.5/title.htm
如果你想继续尝试(如果有遗嘱有办法),那么尝试使用“any”的数据类型而不是字符串,或尝试创建一个与表匹配的结构并传递结构的数组作为参数而不是字符串。