Задавайте вопросы, мы ответим
Вы не зашли.
Изучаю MySQL, опыта работы как в нем, так и в MSSQL мало
Нашел скрипт поиска кратчайшего расстояния для MSSQL.
<script>
declare @t table (a varchar(10), b varchar(10))
insert into @t
select 'a1','a2' union
select 'a2','a3' union
select 'a3','a4' union
select 'a2','a4'
declare @start varchar(10), @end varchar(10)
select @start='a1',@end='a4'
-- обход графа
set nocount on
declare @v table (a varchar(10), step int, path varchar(8000))
declare @step int set @step=0
insert into @v values(@start,@step,@start)
while @@rowcount > 0 begin
set @step=@step+1
insert into @v
select b,@step,v.path+' - '+cast(t.b as varchar) from @t t
inner join @v v on t.a=v.a and step=@step-1
end
-- ответ(ы)
select top 1 with ties path from @v
where a = @end
order by step
</script>
Понимаю, что он не самый идеальный, но как вариант устраивает. На MSSQL работает прекрасно.
Для начала я понял, что объявление переменной через DECLARE не отрабатывает. Устанавливаю через SET. Хотя аналог для declare @v table могу придумать только один CREATE TEMPORARY TABLE.
Далее системной переменную @@rowcount следует заменить SET @row_count = select count(*) from...
Единственное что не могу понять - как мне встроить итерацию. Приходит на ум - создать встроенную процедуру через CREATE PROCEDURE, но тут столкнулся со следующимися проблемами:
1 - процедура после вызова встраивается в MySQL, и не могу понять хорошо это или плохо
2 - вызывая процедуру через CALL my_proc у меня вылетает ошибка со стеком
MySQL Database Error: Thread stack overrun: 6436 bytes used of a 131072 byte stack, and 128000 bytes needed. Use 'mysqld -O thread_stack=#' to specify a bigger stack.
Подскажите, правильно ли я рассуждаю при перекладывании скрипта и что делать с итерацией
Отредактированно AleGol (17.05.2010 13:43:32)
Неактивен
Я Вам настоятельно рекомендую написать всё самостоятельно: проблема именно
в том, что в MSSQL мало опыта. Например, @@row_count — это не количество
строк в таблице. И без чтения документации этот вопрос останется открытым
Стек действительно нужно поднять: значение по умолчанию в 5.1 в MySQL подняли,
чтобы работали процедуры, но в debian оставили старое значение, и возникают
такие проблемы.
Неактивен