RUS  ENG 

SQL-запросы

Страницы: Пред. 1 2 3 4 5 След.
RSS
SQL-запросы
 
Все можно, главное понимать по какому признаку будет осуществляться перенос данных.
Возможно:
-Пространственное пересечения,
-Соответствие каких-либо полей, к примеру наименование или код.
 
Как у вас выполняется GETDATE ( ) в SQL запросе?
Такой запрос
select year(GETDATE())
возвращает 2016, однако после запрос
update [0] set [tech] = year(GETDATE())
where [tech] is null
в поле [tech] - 1899.

Можно ли получить секунды и миллисекунды текущего времени?
 
Aksut, в выполнении UPDATE у нас была ошибка. Исправления будут доступны в ближайшем обновлении.
Функций получения секунд и миллисекунд пока нет, будет уже в 8-й версии.
 
Zulu 7.0.0.6242.
Ошибка выполнения запроса через браузер через 30 секунд: "Не выполнить запрос. query timeout expired."
Пытался увеличить таймаут через структуру слоя - база данных - "соединения".
Через инструмент построения строки соединения, во вкладке "Дополнительно" не получилось.
Менял текст в поле "Использовать строку соединения". Выставил таймаут 120 секунд, но запрос всё так же вылетает с ошибкой через 30 секунд. На строку соединения не ругается, всё остальное делает правильно.
Причем в результате должно быть 2500 строк, другой запрос с 5000 строк в результате выполняется нормально.
Не могли бы Вы подсказать как увеличить таймаут?
 
DenisGeonav, насколько можно судить, используется SQL Server ?
Через строку соединения нет возможности изменить время таймаута - провайдер не реагирует на этот параметр.
Если проблема постоянная именно с этим запросом, то возможно дело в самом запросе. Свяжитесь со мной ([email protected], Дмитрий Озеров) чтобы обсудить подробности. Как звучит запрос, структура таблицы, кол-во записей в таблице, индекс и проч.
 
Цитата:
Есть задача: найти все участки водопровода, которые заканчиваются потребителями. Я так понимаю, нужно использовать функцию STIntersects, а аргументами функции должны быть участок (водопровод, тип 8) и потребитель (водопровод, тип 5). Во всех доступных примерах пространственные запросы применяются к объектам, которые принадлежат разным слоям (например, дома и водопровод-потребители). Как сформировать SQL-запрос для разных типов объектов одного слоя?...

Данный запрос должен сработать.
Только может выполняться долго, в зависимости от количества объектов в слое.

SELECT b.Sys
FROM [водопровод] as a, [водопровод] as b
WHERE a.typeid=5 AND b.typeid=8 AND a.Geometry.STTouches(b.Geometry)

Что-то я запутался. От того, что sql использую раз в год?
Сейчас у меня фактически обратная задача: найти "висячих" потребителей, т.е. тех, к которым не приходит участок.
Пытаюсь выполнить
SELECT a.Sys
FROM [водопровод] as a, [водопровод] as b
WHERE a.typeid=5 AND b.typeid=8 AND (NOT a.Geometry.STTouches(b.Geometry))
в ответ получаю как раз таки потребителей, связанных с участками. Судя по всему NOT в этом случае не работает.
Как быть? Верните веру в sql :) и человечество.
 
вопрос глупый, но никак не могу вспомнить решение! как с помощью запроса заменить точку на запятую? точка может встречаться в любой части поля.
 
Цитата
Strannik написал:
вопрос глупый, но никак не могу вспомнить решение! как с помощью запроса заменить точку на запятую? точка может встречаться в любой части поля.
Здравствуйте!
Попробуйте следующий запрос:

Код

UPDATE [Слой тепловой сети] SET [Адрес узла ввода] =
replace([Адрес узла ввода], ".", ",")
 
Цитата
Don_Quixote написал:
Сейчас у меня фактически обратная задача: найти "висячих" потребителей,
Аналогичная задача. Как я понимаю, в условиях WHERE не получится использовать NOT, AND a.Geometry.STTouches(b.Geometry) = 0 и проч.?
Необходимо использовать функцию STDisjoint?
 
Татьяна Миронова, лучше найти все связанные (допустим через STTouches), выделить в группу, а потом инвертировать её.
 
Цитата
Дмитрий Озеров написал:
Татьяна Миронова , лучше найти все связанные (допустим через STTouches), выделить в группу, а потом инвертировать её.
Смысл понятен, спасибо. А инвертировать каким способом?

И почему лучше использовать ваш способ? STDisjoint будет долго отрабатывать (не получилось дождаться завершения запроса)? И вопрос - если закрыть программу, не дожидаясь выполнения запроса - запрос завершится или будет отрабатывать дальше на сервере?
 
Цитата
Татьяна Миронова написал:
Смысл понятен, спасибо. А инвертировать каким способом?
Используйте команду главного меню Карта\Группа\Инвертировать (горячие клавиши Ctrl+Shift+I)
Изменено: Роман Жуков - 04.08.2017 16:54:58
 
спасибо за оперативные ответы. Получилось достаточно простым запросом

SELECT b.sys AS 'Здание', k.sys AS 'Потребитель' FROM Здания AS b
LEFT JOIN [Тепловые сети] AS k ON b.Geometry.STContains(k.Geometry) and k.typeid = 3
where k.sys is null
 
Цитата
Татьяна Миронова написал:
И почему лучше использовать ваш способ? STDisjoint будет долго отрабатывать (не получилось дождаться завершения запроса)?
STDisjoint возвращает 1, если объекты не связаны друг с другом, т. о. для каждого узла это условие сработает почти для всех объектов слоя, кроме связанного с ним участка. И да, это условие - "долгое", для него не работает оптимизация.
Цитата
И вопрос - если закрыть программу, не дожидаясь выполнения запроса - запрос завершится или будет отрабатывать дальше на сервере?
Да, запрос будет дальше обрабатываться, и после того как закончится его выполнение, сервер высвободит ресурсы и закроет "повисшее" соединение.
 
Здравствуйте.
У меня два вопроса:
1. А как можно с помощью sql запроса поменять часть названия адреса потребителя? Есть потребители с названиями типа "ул. Мостовая, 5 (Лаборатория)", "ул. Мостовая, 32" и т.д. Как можно поменять только название улицы, а другие значения оставить неизменными. Насколько я понимаю в sql для этого используется команда replace, но в zulu она почему-то не работает.

2. Написал sql запрос для изменения условного диаметра трубопровода во внутренний. При попытке замены названия слоя с одного на другой в редакторе sql появляются кракозябры как на картинке. Приходится копировать всё в блокнот, заменять там и копировать обратно. Что не очень удобно.
Можно ли как-то изменить запрос, что бы название слоя упоминалось только один раз?
или можно ли как-то задать через псевдоним название слоя для всех запросов update сразу?

Спасибо
Скрытый текст
Скрытый текст
 
Павел Рубцов, добрый день!
1. Replace должен работать в текущей версии (8.0.0.6802). Недавно разбирали с пользователями подобный вопрос по изменению данных.
2. Надо знать как Вы заменяете имя слоя (Вы не указали), причина пока не ясна. Понятия подобного псевдонима источника в нашей реализации SQL пока нет, про другие реализации SQL я тоже не знаю. Нужно подумать.
 
Цитата
Дмитрий Озеров написал:
Павел Рубцов , добрый день!
1. Replace должен работать в текущей версии (8.0.0.6802). Недавно разбирали с пользователями подобный вопрос по изменению данных.
2. Надо знать как Вы заменяете имя слоя (Вы не указали), причина пока не ясна. Понятия подобного псевдонима источника в нашей реализации SQL пока нет, про другие реализации SQL я тоже не знаю. Нужно подумать.
1. Действительно была установлена не такая поздняя версия. После обновления replace работает.
2. Я нажимаю ctrl+h и в графе "что" ввожу "Название слоя", а в "чем" новое название слоя.
 
Павел Рубцов, добрый день!
Подправили проблему в операции "Поиск и Замена" в редакторе.
 
Дмитрий Озеров, заработало. Спасибо!
 
Здравствуйте.
С помощью запроса ниже приравниваю значения расчетного времени восстановления для задвижки и примыкающих к ней трубопроводов. Насколько я понял, то значение для задвижки берётся из трубопровода, у которого sys больше. Можно ли как-нибудь сделать запрос, чтобы в задвижку записывалось максимальное значение из трубопроводов?
Код
UPDATE b   
SET b.[Расчетное время восстановления, ч] = a.[Расчетное время восстановления, ч]
FROM [СТ_Ульяновск_2] as a, [СТ_Ульяновск_2] as b
WHERE a.typeid=6 AND b.typeid=5 AND a.Geometry.STTouches(b.Geometry)
 
Воспользуйтесь конструкцией Inner Join

Примеры/SQL запросы
 
Дмитрий Емельянов, спасибо большое за помощь, получилось с помощью Inner Join сделать нужный запрос.
Только поймал непонятный баг. Если карту открыть локально, то запрос выполняется, а если на сервере, то выдаёт ошибку "Unresolved symbol 'mg'."
Скрытый текст

В чем может быть причина?

UPD Вопрос снимается, были установлены разные версии клиента и сервера.
Изменено: Павел Рубцов - 24.09.2018 18:02:14
 
Цитата
Павел Рубцов написал:
"Unresolved symbol 'mg'."
Добрый день!

обновите программное обеспечение. исправили.
 
Здравствуйте!
Подскажите, пожалуйста, имеется ли возможность с помощью SQL запроса подставить в поле наименования задвижки наименование конца участка сети, следующего за задвижкой? Т.е. необходимо видеть при экспорте в Excel куда идет задвижка, что бы можно было идентифицировать участок сети. Ранее выполнял запрос по подстановке в Наименование задвижки наименование камеры, где она установлена. Пример запроса ниже.
UPD ATE [Тепловая сеть]
SE T [temporary]=[Наименование арматуры]+" в "+[Место установки]
 
Информацию о топологической связности сети SQL пока не поддерживает. Можно в макросе VBScript использовать комбинацию методов объектной модели и SQL. Пример макроса для обработки текущего элемента текущей карты:
Код
' ActiveX enumeration values definitions start (do not change!)
Const eIncidentOutcoming = 2
' ActiveX enumeration values definitions end


Sub SetValve
    
    'Активный слой текущей карты
    Set L = Zulu.ActiveMapDoc.Layers.Active
    
    'Активный элемент активного слоя
    ValveID = L.CurrentID

'..... Тут должна быть проверка, является ли элемент задвижкой  
    
    'Получение элементов, выходящих из данного узла
    Set Els = L.GetIncidentElements (ValveID, eIncidentOutcoming)
    
   If Els.Count > 0 Then
        ' Запись (для примера) имени текущего узла плюс ID выходящего участка
        L.ExecSQL "UPDATE SET [Temp1] = [Name] + 'в' + '" + CStr(Els.Item(1).Key) + "' WHERE Sys = "  + CStr(ValveID)        
        
    End If           
    
End Sub
Страницы: Пред. 1 2 3 4 5 След.