如何将mssql用户定义的table类型转换为mysql UDT

How to convert mssql user-defined table type into mysql UDT

This is my mssql UDT

create type ConditionUDT as Table 
(
    Name varchar(150),
    PackageId int
);

This is my mssql Stored Procedure

create Procedure [dbo].[Condition_insert]
    @terms_conditions ConditionUDT readonly
as
    begin
    insert into dbo.condition (name, p_id)
    select [Name],[PackageId]
    from @terms_conditions;
    end

正如 Larnu 所想,MySQL 根本不支持用户定义的类型,更不用说用户定义的 table 类型了。

您必须将它们全部设为单独的标量参数。

如果您别无选择,但肯定会从 sql 服务器迁移到 mysql。

,则有一个变通解决方案

在 mysql 中占据多行的最接近的结构预定义对象是实际的 table。因此,sql 服务器的每个 UDDT 需要 1 table。确保您使用特定的架构或命名转换,以便您知道那些 tables 是 UDDT 仿真。

想法是填写信息,将它们用于 sp,然后删除它们。但是,您需要保证谁在阅读什么以及该信息在使用、消耗后被删除。所以:

对于那些 table 中的任何一个,您都需要 2 列,我建议始终将它们放在第一位。那将是键和变量名。键可以是 char(38) 并使用 UUID() 获取唯一标识符。它也可以是 int 并使用 connectionid() 代替。然而,唯一标识符更好,因为它可以确保无论如何都不会使用不是为他缩进的信息。变量名称将是 sql 服务器参数中使用的名称,只是一个字符串。这样:

从 table 这个名字你就知道你用的是什么 UDDT。 您通过密钥知道进程的身份。 你知道'variable'的名字。

因此,在您的应用程序代码中: 开始交易。 使用键和变量名将数据插入正确的(UDDT 模拟器)tables 向存储过程提供键和变量名称。您可以在同一 sp 调用中对许多 table 类型参数使用相同的键。 存储过程现在可以像以前一样使用来自 UDDT 变量的信息,使用键和变量名作为过滤器来查询正确的 UDDT 模拟 table。 删除你插入的数据 犯罪 捕获时,回滚。

为简单起见,您的 sp 可以将数据读入临时 table,并且您不需要为此方面更改原始 sql 服务器 sp 的一行代码。

对您的应用程序代码进行事务处理将帮助您确保无论出现什么问题,您的临时变量数据都将被删除或永不提交。