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