Size: a a a

SqlCom.ru - уголок MS SQL

2021 June 04

К

Какой-то Хмырь... in SqlCom.ru - уголок MS SQL
спасибо)


select    local_database_name,
         transferred_size_bytes * 100 / database_size_bytes as percent_completed,             transfer_rate_bytes_per_second/1024.00/1024.00 as Speed_MBs,
         internal_state_desc
from sys.dm_hadr_physical_seeding_stats
источник

Л

Лучший ник in SqlCom.ru - уголок MS SQL
Подскажите, как реализовать вывод таблицы в зависимости от условия?
К примеру:
а>b - выводится таблица1
b>a - выводится таблица2
источник

KT

Konstantin Taranov in SqlCom.ru - уголок MS SQL
либо динамический SQL, либо хранимая процедура, но а так сложно понять даже что у вас за база данных
источник

Л

Лучший ник in SqlCom.ru - уголок MS SQL
SQL Server, есть 3 CTE которые нужно выводить в зависимости от результата условия
источник

KT

Konstantin Taranov in SqlCom.ru - уголок MS SQL
а условие как формируется? но в целом видно что проблема с постановкой задачи, а не с релизацией
источник

Л

Лучший ник in SqlCom.ru - уголок MS SQL
Возможно я это не правильно построил, но в общем такое условие:
Пользователь выбирает начало периода и конец периода. Для этого есть две переменные @StartYear и @EndYear.
Т.Е Если @StartYear=2019, то мне нужно вывести отчёт который я построил за 2019 год.
Если @StartYear=2019 и @EndYear= 2020, то мне нужно будет вывести два отчёта.
Это отчёты у меня лежат в CTE, но я уже понял что какую-то с этих CTE  НЕ вывести не получится, ибо CTE должна всегда быть с выводом.
Дальше я зашёл в тупик потому что с многими конструкциями в T-SQL я ещё не работал
источник

KT

Konstantin Taranov in SqlCom.ru - уголок MS SQL
а если @StartYear=1900 и @EndYear= 2020, то 120 отчетов?
источник

Л

Лучший ник in SqlCom.ru - уголок MS SQL
Для выбора есть всего 3 года - 2019,2020,2021
источник

KT

Konstantin Taranov in SqlCom.ru - уголок MS SQL
я вам жуткий костыль посоветую, но видимо правильно делать все равно времени нет (его никогда нет)
WHERE CASE WHEN @StartYear=2019 THEN 1 ELSE 0 = 1
ну или как там вам надо правильно добавить к каждому из CTE доп условие с логическим условием AND если уже есть WHERE, но если будут проблемы с производительностью это уже не ко мне
источник

Л

Лучший ник in SqlCom.ru - уголок MS SQL
Немного не понимаю к чему приведёт THEN 1 ELSE 0 = 1 в предложении WHERE
источник

KT

Konstantin Taranov in SqlCom.ru - уголок MS SQL
true или false
источник

R

Radist in SqlCom.ru - уголок MS SQL
Добрый день. Есть необходимость организовать продление времени жизни токенов, лежащей в одной таблице, если оставшееся время жизни меньше определённого минимума. При чём, запросы на продления могут приходить практически одновременно в разных сессиях. По сути, нужно выполнить запрос такого вида:
UPDATE tokens
  SET timeout = dateadd(hh, 2, timeout)
WHERE id = <ID>
  AND timeout < dateadd(hh, 1, sysdatetime())
  AND timeout > sysdatetime()
но только так, чтобы запись обновилась в самой первой сессии, а в других, которые запустили запрос почти одновременно с первой, вообще ничего не делали (и не блокировались).
Ранее такую же задачу решал в oracle и PostgreSQL, там для этого используется select ... for update skip locked. Как правильно подобная задача решается в mssql?
Я так понимаю, что один из вариантов - выставить уровень изоляции read uncommited и сразу выполнять commit. Но оптимально ли такое решение (учитывая то, что для запросов будет использоваться сессии из пула подключений и теоретически есть риск попадения сессии с этим уровнем изоляции обратно в пул из-за ошибки)?
источник

OM

Oleg Makarikhin in SqlCom.ru - уголок MS SQL
источник

R

Radist in SqlCom.ru - уголок MS SQL
Спасибо, посмотрю
источник

R

Radist in SqlCom.ru - уголок MS SQL
Я правильно понял, что такой запрос полностью решает задачу:
UPDATE tokens WITH (READPAST)
  SET timeout = dateadd(hh, 2, timeout)
WHERE id = <ID>
  AND timeout < dateadd(hh, 1, sysdatetime())
  AND timeout > sysdatetime()
?
источник

OM

Oleg Makarikhin in SqlCom.ru - уголок MS SQL
Похоже, я просто вопрос не понял. Судя по оракловому запросу вы хотите пропускать не ждать те строки которые нельзя заблокировать
источник
2021 June 06

ВА

Виктор Аретинский... in SqlCom.ru - уголок MS SQL
Как исправить этот sql запрос под inner join?

SELECT
*,
(SELECT group FROM user WHERE user_id=21),
(SELECT name FROM workshop WHERE id=1)
FROM
solution
WHERE
user_id=21 AND workshop_id=1;
источник

R

Radist in SqlCom.ru - уголок MS SQL
select s.*, u.group, (select name from workshop where id=1) from solution s inner join user u on u.user_id = s.user_id where s.user_id = 21 and workshop_id = 1
Для таблицы workshop  делается аналогично
источник

MZ

Maxim Zadonskiy in SqlCom.ru - уголок MS SQL
Всем привет! Хотел узнать, насколько частая практика в компаниях создание OLAP, с чем связан выбор и какие есть альтернативы?
источник

bc

bad coder in SqlCom.ru - уголок MS SQL
привет всем , не подскажите пожалуйста как можно совместить агрегатные функции count и max что бы не выдавало ошибку ?
источник