使用 PHP PDO 在 SQL 中将多行传递给 UDF
Posted
技术标签:
【中文标题】使用 PHP PDO 在 SQL 中将多行传递给 UDF【英文标题】:Pass multiple rows to UDF in TSQL using PHP PDO 【发布时间】:2017-01-08 05:44:58 【问题描述】:我目前在 TSQL 中有一个查询,它接收产品 ID 和相关价格的集合并计算折扣价。目前,产品 ID 和初始定价都在数据库中,我编写的查询与这些项目相连接。该查询根据查询中之前出现的其他产品设置定价,因此我不能使用单个查询来查询产品一的价格,然后是产品二的价格,等等。必须对它们进行评估作为一个集合在一起。
我现在必须将此折扣逻辑重构为一个表值 UDF,它将以两种方式使用:
-
现有方法,需要针对 ID 集合和数据库中现有的定价执行折扣定价。
一种新方法,我需要将 ID 和初始定价从 php 传递到 UDF(它们不会存在于数据库中)。
我对每一点的问题是:
-
我基本上需要将一个表传递给 UDF。根据我的阅读,这意味着我需要创建自己的用户定义表类型,将数据库中的产品 ID/定价查询到该表类型,然后作为参数传递给 UDF。对吗?
新方法是我真正迷失的地方,因为我不确定如何在 PHP 中获取基本上是一组 ID/价格对(想想购物车)并将其传递给我的 UDF 以获得结果价钱。我可以手动破解一个查询,该查询从多个单行语句生成我的用户定义表 my 和
UNION
它们一起,但不知道如何将多个“行”从 PHP 传递到 UDF。
处理这个问题的正确方法是什么?
【问题讨论】:
【参考方案1】:完全归功于https://forums.whirlpool.net.au/forum-replies.cfm?t=2598049
定义一个“用户定义的表类型”,它定义了要传递给 UDF 的表结构, 例如 创建类型 [PRODUCTIDPRICING] 为 桌子( 产品 INT, 产品价格数字 (18,2) ) 当想要更新您的定价时,您的 TSQL 将执行以下操作:
-
将变量声明为表类型
DECLARE @PRODUCTSTODISCOUNT PRODUCTIDPRICING;
将数据插入表中
insert into @PRODUCTSTODISCOUNT values (1,1.23)
通过@PRODUCTSTODISCOUNT
变量执行您的UDF
【讨论】:
以上是关于使用 PHP PDO 在 SQL 中将多行传递给 UDF的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 错误 1934 发生在 INSERT 到具有计算列 PHP/PDO 的表中
如何使用 PHP PDO 在 mySQL 中插入多行 JSON 对象数据?