2

我在 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 参数生成了一个字符串变量,该参数为假(当然,PB 的调用失败)。有可能让它以某种方式工作吗?当然,我有解决方法的想法(例如制作一个包装器 sp 以忽略 TVP 参数),但我想知道如何让它以这种方式与 TVP 一起工作!

提前谢谢!

加博尔

4

1 回答 1

1

坏消息,基于 PB12.5 文档中的这个可能不支持它:

不受支持的 SQL Server 2008 功能

PowerBuilder SNC 接口不支持 SQL Server 2008 中引入的 User-Defined Table Type(一种用户定义的类型,表示表结构的定义)。

http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.help.pb.12.5/title.htm

如果您想继续尝试(如果有意愿的话),请尝试使用“任何”数据类型而不是字符串,或者尝试制作与表匹配的结构并将结构数组作为参数传递而不是字符串。

于 2013-07-18T18:22:28.807 回答