Передайте несколько строк в UDF в TSQL, используя PHP PDO

В настоящее время у меня есть запрос в TSQL, который принимает набор идентификаторов продуктов и связанных с ними цен и вычисляет цены со скидкой. На данный момент идентификаторы продуктов и начальные цены находятся в базе данных, и написанный мной запрос объединяется с этими элементами. Запрос устанавливает цены на основе других продуктов, которые появились перед ним в запросе, поэтому я не могу использовать отдельные запросы для цены первого продукта, затем продукта второго и т. д. Они должны быть оценены как сборник вместе.

Теперь мне нужно преобразовать эту логику скидки в UDF с табличным значением, который будет использоваться двумя способами:

  1. Существующий подход, при котором необходимо будет выполнять ценообразование со скидкой для набора идентификаторов и цен, существующих в базе данных.
  2. Новый подход, при котором мне нужно будет передать идентификаторы и начальные цены в UDF из PHP (их не будет в БД).

Мои проблемы для каждой соответствующей точки:

  1. Мне по существу нужно передать таблицу в UDF. Из того, что я прочитал, это означает, что мне нужно создать свой собственный определяемый пользователем тип таблицы, запросить идентификаторы/цены моих продуктов в базе данных в этот тип таблицы, а затем передать в качестве аргумента UDF. Это правильно?
  2. Новый подход - это то, где я действительно потерялся, так как я не уверен, как взять то, что в основном представляет собой массив пар идентификатор/цена в PHP (например, корзина для покупок), и передать это в мой UDF, чтобы получить результирующую цену. Я мог бы вручную собрать запрос, который генерирует мою пользовательскую таблицу my из нескольких однострочных операторов и UNION их вместе, но в противном случае я понятия не имею, как передать несколько «строк» ​​из PHP в UDF.

Каков правильный способ справиться с этим?


person walshy002000    schedule 08.01.2017    source источник


Ответы (1)


Полная ссылка на https://forums.whirlpool.net.au/forum-replies.cfm?t=2598049

Определите «Определяемый пользователем тип таблицы», который определяет структуру таблицы для передачи в UDF, например, CREATE TYPE [PRODUCTIDPRICING] AS TABLE(PRODUCTID INT, PRODUCTPRICE NUMERIC(18,2)). следующее:

  1. Объявите переменную как тип таблицы DECLARE @PRODUCTSTODISCOUNT PRODUCTIDPRICING;
  2. Вставьте данные в таблицу insert into @PRODUCTSTODISCOUNT values (1,1.23)
  3. выполнить свою UDF, передав переменную @PRODUCTSTODISCOUNT
person walshy002000    schedule 17.01.2017