4

голосов
1

ответ
2.2k

Просмотры

Рекурсивный CTE Ведомость материалов

Это мой первый вопрос, так что простите меня, если я не достаточно ясно. Я поручено получать общую стоимость всех компонентов для сборки (Bill материалов). В принципе, я хочу, чтобы запросить таблицу, которая содержит распределение заказа на поставку для компонентов, так что я могу получить стоимость в данный момент связан с неопубликованной сборкой. Это становится сложнее, так как компонент сборки может быть сам по себе собранию, и в этом случае мне нужно запросить другую таблицу, которая содержит информацию о том другие узлы связаны с этим основным. (У меня есть проверки на месте, чтобы убедиться, что над выделением не происходит, но это не возможно, ничего не было еще выделено и это нормально) В этом случае запрос таблицы размещения заказа на поставку для компонентов этого числа сборки, а также добавить эти расходы к общая для родительского собрания. Я использую CTE, первый раз, и не имея много удачи. Может кто-нибудь, возможно, поможет определить, что я делаю неправильно здесь? Якорь тянет во всех компонентах, за исключением узлов, а также их стоимость единицы и кол-во от ПО для основной сборки я пытаюсь определить стоимость для. Рекурсивная часть должна быть потянув компоненты, стоимость и Qty для сборок, которые были «связаны» с помощью существующих на столе BM10200_AssemblyQtyDetail. Если родительская сборка находится в столбце TRANNUM, то TRX_ID этой строки является связаны сборками, который является подузел компонентом основного блока. ИСПОЛЬЗОВАНИЕ HT идти с BOMCost (Монтаж, компонентный, PriceFromPO, Кол-во, BOMLevel) AS (- определение члена Якоря ВЫБОРА asl.TRX_ID, asl.ITEMNMBR, asl.UNITCOST, asl.SERLTQTY, 0 КАК BOMLevel ОТ HT.DBO.BM10400 AS над уровнем моря WHERE asl.TRX_ID = 'ASM0002909' UNION ALL - Рекурсивный определение членом ВЫБОР asl.TRX_ID, asl.ITEMNMBR, asl.UNITCOST, asl.SERLTQTY, BOMLevel + 1 ОТ HT.DBO.BM10400 КАК над уровнем моря INNER JOIN HT.DBO.BM10200_AssemblyQtyDetail КАК BQD ПО asl.TRX_ID = BQD .TRANNUM INNER JOIN BOMCost AS Ьс ON bqd.TRX_ID = bc.Assembly) - Заявление, выполняющей КТР ВЫБЕРИТЕ ассамблею, компонентный, PriceFromPO, Кол-во, BOMLevel оТ BOMCost Повторюсь, проблема здесь это только возвращает компоненты основной сборочные без какого-либо расходов, связанных сборочного узел. Так только компоненты верхнего уровня. У меня есть запись в таблице связующей, соединяющей узел для субблока этого BM в основную сборку, пока он не тянет компоненты для этой сборки числа. Я думаю, что это может иметь что-то делать с рекурсивными разделами вливается. Любая помощь приветствуется! Вот сценарий данных. ASM0002909 представляет собой сборку с компонентом, который сам по себе является сборка. ASM0002914 строится одновременно для ASM0002909 и сама состоит из двух компонентов. Я только хочу, чтобы получить стоимость, Что на самом деле было получено от ПО, так что не имеет значения, если другие компоненты необходимы, но еще не были получены. Вот что все должны быть просуммированы (SERLTQTY * UNITCOST) Для того, чтобы получить общую стоимость для основного узла. Но вот результат настоящее время я получаю от моего запроса. Он должен быть запущен шаг рекурсии один раз и возвращает результаты ASM0002914. Я создал sqlfiddle с двумя основными таблицами, данными, и с запросом SQL Я в настоящее время использую, который до сих пор не подбирая компоненты узлов и возвращает предел рекурсии превысил ошибку. http://sqlfiddle.com/#!3/bd1b98/6 ASM0002914 строится одновременно для ASM0002909 и сама состоит из двух компонентов. Я только хочу, чтобы получить стоимость, Что на самом деле было получено от ПО, так что не имеет значения, если другие компоненты необходимы, но еще не были получены. Вот что все должны быть просуммированы (SERLTQTY * UNITCOST) Для того, чтобы получить общую стоимость для основного узла. Но вот результат настоящее время я получаю от моего запроса. Он должен быть запущен шаг рекурсии один раз и возвращает результаты ASM0002914. Я создал sqlfiddle с двумя основными таблицами, данными, и с запросом SQL Я в настоящее время использую, который до сих пор не подбирая компоненты узлов и возвращает предел рекурсии превысил ошибку. http://sqlfiddle.com/#!3/bd1b98/6 ASM0002914 строится одновременно для ASM0002909 и сама состоит из двух компонентов. Я только хочу, чтобы получить стоимость, Что на самом деле было получено от ПО, так что не имеет значения, если другие компоненты необходимы, но еще не были получены. Вот что все должны быть просуммированы (SERLTQTY * UNITCOST) Для того, чтобы получить общую стоимость для основного узла. Но вот результат настоящее время я получаю от моего запроса. Он должен быть запущен шаг рекурсии один раз и возвращает результаты ASM0002914. Я создал sqlfiddle с двумя основными таблицами, данными, и с запросом SQL Я в настоящее время использую, который до сих пор не подбирая компоненты узлов и возвращает предел рекурсии превысил ошибку. http://sqlfiddle.com/#!3/bd1b98/6 Я только хочу, чтобы получить стоимость, Что на самом деле было получено от ПО, так что не имеет значения, если другие компоненты необходимы, но еще не были получены. Вот что все должны быть просуммированы (SERLTQTY * UNITCOST) Для того, чтобы получить общую стоимость для основного узла. Но вот результат настоящее время я получаю от моего запроса. Он должен быть запущен шаг рекурсии один раз и возвращает результаты ASM0002914. Я создал sqlfiddle с двумя основными таблицами, данными, и с запросом SQL Я в настоящее время использую, который до сих пор не подбирая компоненты узлов и возвращает предел рекурсии превысил ошибку. http://sqlfiddle.com/#!3/bd1b98/6 Я только хочу, чтобы получить стоимость, Что на самом деле было получено от ПО, так что не имеет значения, если другие компоненты необходимы, но еще не были получены. Вот что все должны быть просуммированы (SERLTQTY * UNITCOST) Для того, чтобы получить общую стоимость для основного узла. Но вот результат настоящее время я получаю от моего запроса. Он должен быть запущен шаг рекурсии один раз и возвращает результаты ASM0002914. Я создал sqlfiddle с двумя основными таблицами, данными, и с запросом SQL Я в настоящее время использую, который до сих пор не подбирая компоненты узлов и возвращает предел рекурсии превысил ошибку. http://sqlfiddle.com/#!3/bd1b98/6 S, что все должны быть просуммированы (SERLTQTY * UNITCOST) Для того, чтобы получить общую стоимость для основного узла. Но вот результат настоящее время я получаю от моего запроса. Он должен быть запущен шаг рекурсии один раз и возвращает результаты ASM0002914. Я создал sqlfiddle с двумя основными таблицами, данными, и с запросом SQL Я в настоящее время использую, который до сих пор не подбирая компоненты узлов и возвращает предел рекурсии превысил ошибку. http://sqlfiddle.com/#!3/bd1b98/6 S, что все должны быть просуммированы (SERLTQTY * UNITCOST) Для того, чтобы получить общую стоимость для основного узла. Но вот результат настоящее время я получаю от моего запроса. Он должен быть запущен шаг рекурсии один раз и возвращает результаты ASM0002914. Я создал sqlfiddle с двумя основными таблицами, данными, и с запросом SQL Я в настоящее время использую, который до сих пор не подбирая компоненты узлов и возвращает предел рекурсии превысил ошибку. http://sqlfiddle.com/#!3/bd1b98/6 м в настоящее время с помощью которого до сих пор не подбирая компоненты узлов и возвращает предел рекурсии превысил ошибку. http://sqlfiddle.com/#!3/bd1b98/6 м в настоящее время с помощью которого до сих пор не подбирая компоненты узлов и возвращает предел рекурсии превысил ошибку. http://sqlfiddle.com/#!3/bd1b98/6
Dezryth
4

голосов
3

ответ
867

Просмотры

SQL Server TRY ... CATCH Is ​​Not Ловля Ошибка

TRY между BEGIN EXEC N'EXEC sp_testlinkedserver N '' [MyLinkedServer] ''; '; END TRY CATCH НАЧАТЬ SELECT 'LinkedServerDown' AS Результат RETURN END CATCH ВЫБРАТЬ TOP (1) ПгвЬЫате FROM [MyLinkedServer] .TestDatabase.dbo.Customer Мой первый опыт с помощью Try ... Catch в SQL Server не впечатлил меня до сих пор , Я остановил SQL Service на моем связанный сервере, чтобы попытаться проверить ситуацию, когда наш связанный сервер вниз, недоступен и т.д. Вместо того, чтобы ловить какую-либо ошибку, этот код просто бросает «Войти таймаут» и «связанные с сетью или ошибка, специфичная произошло ...»ошибку и прекращает выполнение остальной части кода. Является ли мой SQL TRY ... CATCH блок не настроен правильно?
Dezryth
1

голосов
1

ответ
350

Просмотры

Преобразование строки с разделителями в XML в C # с помощью LINQ [закрытыми]

Я использую System.Xml и есть текстовое поле со строкой, ограниченной \ г \ п. Строка в основном список серийных номеров, которые я хочу отформатировать в XML, чтобы передать в хранимую процедуру для выполнения проверки. Пример строки, как представляется, в настоящее время: «ABC123 \ г \ nDEF456 \ г \ п» Я имею в виду, что это будет очень простой XML-схемы, например ABC123 DEF456
Dezryth