Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
Glory
Member

Откуда:
Сообщений: 104760
Kukurechka
TimonSP
Kukurechka
TimonSP

Если они сооветсвуют, то как определить, что [a] это голова?

у [а] в табл. объект планирования нет последующСтр
...


Как нет, если ошибки и там и там, и данные сооветсвуют - Тогда там будтет [i].

в этом вы правы!
но предположим мы знаем. что [a] точно начальное задание. т.е мы точно знаем с чего начинаются цепочки.

А как это "предположим" узнает сервер ? Он то будет оперировать не "предположим", а значениями в столбцах
10 ноя 08, 14:13    [6417310]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
TimonSP
Member

Откуда:
Сообщений: 107
Kukurechka
TimonSP
Kukurechka
TimonSP

Если они сооветсвуют, то как определить, что [a] это голова?

у [а] в табл. объект планирования нет последующСтр
...


Как нет, если ошибки и там и там, и данные сооветсвуют - Тогда там будтет [i].

в этом вы правы!
но предположим мы знаем. что [a] точно начальное задание. т.е мы точно знаем с чего начинаются цепочки.

Что значит предположим.
Формулируйте заново и воспользуйтесь пунктом 6 из Рекомендации по оформлению сообщений в форуме .
10 ноя 08, 14:26    [6417417]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
TimonSP
Member

Откуда:
Сообщений: 107
Да, кстати всязь [i]-[c] была бы нормальной или нет?
10 ноя 08, 14:29    [6417456]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Kukurechka
но предположим мы точно знаем с чего начинаются цепочки.
Откуда? Этого небыло в ваших постах/условиях (до этого). Есть табличка "голов"? Приведите.
Kukurechka
но предположим мы знаем. что [a] точно начальное задание
Частное решение, для части проблемы: связи на головные елементы. А есть и не головные. Вот если красная линия идёт не из i в а, а из i в d. Что тогда?

Ладно, хватит. Какова ваша первоначальная конкретная изначальная задача? А то "хочу то, сама не знаю что" ...
10 ноя 08, 15:13    [6417826]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
Kukurechka
Member

Откуда:
Сообщений: 26
Mnior
Частное решение, для части проблемы: связи на головные елементы. А есть и не головные. Вот если красная линия идёт не из i в а, а из i в d. Что тогда?
Ладно, хватит. Какова ваша первоначальная конкретная изначальная задача? А то "хочу то, сама не знаю что" ...

постановка задачи такая: выявить в таблице СВязь все циклы в ориентированном графе.
Таблица СВязь(Предшествующий, Последующий)
не важно какое начальное задание!!!
прошу прощение за то что долго мучила всех и вся! но только сейчас поняла задачу сама)))))
10 ноя 08, 15:59    [6418217]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
TimonSP
Member

Откуда:
Сообщений: 107
Kukurechka
Mnior
Частное решение, для части проблемы: связи на головные елементы. А есть и не головные. Вот если красная линия идёт не из i в а, а из i в d. Что тогда?
Ладно, хватит. Какова ваша первоначальная конкретная изначальная задача? А то "хочу то, сама не знаю что" ...

постановка задачи такая: выявить в таблице СВязь все циклы в ориентированном графе.
Таблица СВязь(Предшествующий, Последующий)
не важно какое начальное задание!!!
прошу прощение за то что долго мучила всех и вся! но только сейчас поняла задачу сама)))))


Надеюсь, что вы понимаете, что связь [i]-[a] - не участвует не в одном цикле :)

Попытка решение:
declare @Links table (
    PrevNumber nvarchar(100),
    NextNumber nvarchar(100))

insert into @Links values ('a','c')
insert into @Links values ('a','d')
insert into @Links values ('i','a')
insert into @Links values ('b','d')
insert into @Links values ('b','e')
insert into @Links values ('d','f')
insert into @Links values ('e','g')
insert into @Links values ('e','h')
insert into @Links values ('h','e')
insert into @Links values ('f','f')
insert into @Links values ('g','i')
insert into @Links values ('h','i')
insert into @Links values ('h','j')

select * from @Links



;WITH BLA AS
(
SELECT 
    NextNumber,
    CAST(','+PrevNumber+','+CASE WHEN NextNumber <> PrevNumber THEN NextNumber+',' ELSE '' END AS NVARCHAR(MAX)) WAY
FROM @Links
    UNION ALL
SELECT 
    L.NextNumber,
    B.Way+L.NextNumber+','
FROM @Links L
    JOIN BLA B ON B.NextNumber = L.PrevNumber
              AND B.Way NOT LIKE '%,'+L.NextNumber+',%'
)
SELECT 
    L.PrevNumber,
    L.NextNumber,
    B.Way
FROM @Links L
    JOIN BLA B ON B.NextNumber = L.PrevNumber
              AND B.Way LIKE ','+L.NextNumber+',%'
11 ноя 08, 00:44    [6420251]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
Kukurechka
Member

Откуда:
Сообщений: 26
TimonSP,Спасибо большое! На маленьком объеме данных все работает.
но если число рекурсий превышает 100, то запрос не работает((
11 ноя 08, 11:15    [6421279]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Kukurechka
TimonSP,Спасибо большое! На маленьком объеме данных все работает.
но если число рекурсий превышает 100, то запрос не работает((
Допишите в конце запроса
OPTION(MAXRECURSION 0)
Это если любой уровень вложенности рекурсии Вас устраивает. Или
OPTION(MAXRECURSION <Число>)
если не хотите иметь уровень вложенности рекурсии больше заданного <Числа>
11 ноя 08, 11:40    [6421547]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Kukurechka,

Само по себе достижение 100-го уровня вложенности рекурсии должно насторожить:
а может, она вообще бесконечная?
11 ноя 08, 12:09    [6421875]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Kukurechka
На маленьком объеме данных все работает.
Для большого объёма и малого количества "циклов" моно попробывать такое:
1. Скопировать в отдельную табличку данные.
2. Удалить заведомо нецикличные связи в ней.
Пример:
DECLARE	@Table	TABLE (
	 [From]	Char
	,[To]	Char
	,PRIMARY KEY (
		 [From]
		,[To]
	)
	,UNIQUE ([To]	-- Index
		,[From]
	)
)INSERT	@Table	SELECT	'a','c'
UNION ALL	SELECT	'a','d'
UNION ALL	SELECT	'i','a'
UNION ALL	SELECT	'b','d'
UNION ALL	SELECT	'b','e'
UNION ALL	SELECT	'd','f'
UNION ALL	SELECT	'e','g'
UNION ALL	SELECT	'e','h'
UNION ALL	SELECT	'h','e'
UNION ALL	SELECT	'f','f'
UNION ALL	SELECT	'g','i'
UNION ALL	SELECT	'h','i'
UNION ALL	SELECT	'h','j'
-- Удаляем заведомо нецикличные связи
WHILE (@@RowCount > 0)
	DELETE	T
	FROM	          @Table T
		LEFT JOIN @Table P ON P.[To] = T.[From]
		LEFT JOIN @Table C ON C.[From] = T.[To]
	WHERE	   P.[To]	IS NULL
		OR C.[From]	IS NULL
-- Поиск циклов
;WITH Circle AS (
	SELECT	 [To]
		,Convert(VarChar(max),'-')	AS [Path]
		,[From]
	FROM	@Table T
UNION ALL
	SELECT	 T.[To]
		,'-' + C.[To] + C.[Path]
		,C.[From]
	FROM	     Circle C
		JOIN @Table T ON T.[From] = C.[To]
	WHERE	C.[Path] NOT LIKE '%-' + C.[To] + '-%'
		AND C.[To] != C.[From]
)	SELECT	[To] + [Path] + [From]
	FROM	Circle
	WHERE	[To] = [From]
-- OPTION(MAXRECURSION 0)
11 ноя 08, 12:57    [6422303]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
TimonSP
Member

Откуда:
Сообщений: 107
iap
Kukurechka,

Само по себе достижение 100-го уровня вложенности рекурсии должно насторожить:
а может, она вообще бесконечная?

Ну или существуют цепи длиной более 100 :)
11 ноя 08, 15:21    [6423644]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
TimonSP
iap
Kukurechka,

Само по себе достижение 100-го уровня вложенности рекурсии должно насторожить:
а может, она вообще бесконечная?

Ну или существуют цепи длиной более 100 :)
Я ж и говорю: надо насторожиться и проверять (прежде чем снять ограничение на уровень рекурсии, например).
11 ноя 08, 15:32    [6423738]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
ksia
Guest
iap,
число рекурсий может достигать 100 и более!
11 ноя 08, 17:09    [6424573]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
ksia
iap,
число рекурсий может достигать 100 и более!
C чем я Вас и поздравляю!
Что делать, я вроде бы написал.
11 ноя 08, 17:49    [6424921]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
Kukurechka
Member

Откуда:
Сообщений: 26
iap,
запрос уже около трех часов выполняется)))
так что думаю лучше решение избавится от рекурсий!
11 ноя 08, 17:59    [6425023]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
TimonSP
Member

Откуда:
Сообщений: 107
Kukurechka
iap,
запрос уже около трех часов выполняется)))
так что думаю лучше решение избавится от рекурсий!

Сколько всего записей в таблице?
11 ноя 08, 18:55    [6425393]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Kukurechka
запрос уже около трех часов выполняется)))
так что думаю лучше решение избавится от рекурсий!
Вы видимо читаете только последний пост.
Что вы скажете об этом?
Можно значительно сузить область поиска циклов.
11 ноя 08, 19:02    [6425428]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
Kukurechka
Member

Откуда:
Сообщений: 26
Mnior,

Запустила запрос! пока выполняется...
у меня 9000 записей(заданий)..
как долго может выполнятся такой запрос?
12 ноя 08, 10:17    [6427060]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
TimonSP
Member

Откуда:
Сообщений: 107
Kukurechka,

А можешь выложешь структуру таблицы (с ключами, индексами и т.д.)?
А также может и сами данные, например, в виде xml (заархивированном виде конечно) приложить к сообщению?

Для выгрузки:
select Prev,Next
from [Table1]
for xml auto
12 ноя 08, 10:41    [6427237]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
Kukurechka
Member

Откуда:
Сообщений: 26
Mnior, запрос я попробовала уже 5 часов отрабатывает!
такое ощущение что рукурсия бесконечна 8))
12 ноя 08, 15:52    [6429906]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
Kukurechka
Member

Откуда:
Сообщений: 26


К сообщению приложен файл (XML_struct_table.7z - 47Kb) cкачать
12 ноя 08, 15:53    [6429914]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
Kukurechka
Member

Откуда:
Сообщений: 26


К сообщению приложен файл. Размер - 0Kb
12 ноя 08, 15:54    [6429929]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
Glory
Member

Откуда:
Сообщений: 104760
2 Kukurechka
Используйте кнопочку Script для получения скриптов объекта
12 ноя 08, 15:56    [6429948]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
mxm
Member

Откуда:
Сообщений: 1
XML структура
(from kukurechka)

К сообщению приложен файл (XML_struct_table.7z - 47Kb) cкачать
12 ноя 08, 16:01    [6430002]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти ошибки в таблице связей (SQL 2005)  [new]
Kukurechka
Member

Откуда:
Сообщений: 26
USE [KAPO2710_test2]
GO
/****** Object: Table [dbo].[Связь] Script Date: 11/12/2008 16:05:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Связь](
[Oid] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[Предшествующий] [uniqueidentifier] NULL,
[Последующий] [uniqueidentifier] NULL,

CONSTRAINT [PK_Связь] PRIMARY KEY CLUSTERED
(
[Oid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
ALTER TABLE [dbo].[Связь] WITH NOCHECK ADD CONSTRAINT [FK_Связь_Последующий] FOREIGN KEY([Последующий])
REFERENCES [dbo].[ОбъектПланирования] ([Oid])
NOT FOR REPLICATION
GO
ALTER TABLE [dbo].[Связь] CHECK CONSTRAINT [FK_Связь_Последующий]
GO
ALTER TABLE [dbo].[Связь] WITH NOCHECK ADD CONSTRAINT [FK_Связь_Предшествующий] FOREIGN KEY([Предшествующий])
REFERENCES [dbo].[ОбъектПланирования] ([Oid])
NOT FOR REPLICATION
GO
ALTER TABLE [dbo].[Связь] CHECK CONSTRAINT [FK_Связь_Предшествующий]
12 ноя 08, 16:05    [6430053]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить