Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Microsoft SQL Server

Автор: klimusu
Дата сообщения: 01.12.2010 10:05
volser
спасибо, надо было добавить collate Cyrillic_General_CI_AS
Автор: EugeneBoss3
Дата сообщения: 19.12.2010 00:39
Знатоки, подскажите, плиз, Microsoft SQL Server имеет встроенный по умолчанию Login и Password администратора (как у Firebird, например) или нет?
Автор: SIgor33
Дата сообщения: 19.12.2010 07:54
EugeneBoss3

Цитата:
icrosoft SQL Server имеет встроенный по умолчанию Login и Password администратора

обычно его при установки настраивают имя пользователя могут оставить sa и пустой пароль но обычно пароль меняют. Если у Вас есть доступ к компьютеру на котором сервер можно сбросить для master таблицы
Автор: violant
Дата сообщения: 19.12.2010 10:06
Подскажите. Есть запрос, который состоит из 3-х промежуточных запросов и 2-х временных таблиц. Сделано так для наглядности, т.е. чтобы видеть этапы формирования окончательной выборки. Я в написании запросов не силён.
Вопрос: Как его программно оптимизировать, чтобы не было промежуточных таблиц и возможно впринципе понизить стоимость переходов? Есть ли какой-нибудь софт, возможно он уже всроен в тулсы СУБД?
Знаю что в оракле такой присутствует.
Автор: volser
Дата сообщения: 19.12.2010 10:44
violant
Нужно нанять программиста.
Автор: violant
Дата сообщения: 19.12.2010 16:02
volser

Цитата:
Нужно нанять программиста.

Понятное дело программист БД сможет его оптимизировать, но я спрашиваю про программные средства, которые автоматически позволяют оптимизировать запрос. и все это для MSSQL

Автор: BlackVetal
Дата сообщения: 20.12.2010 05:21
violant
одна мысль вслух: если работает запрос - лучше его не трогать!
Вообще для мелкософта я не слышал таких утилит или какого софта. Можно поитересоваться у людей, кто пользуется RED GATE SQL TOOLS - возможно там чтонить есть - это достаточно мощный пакет утилит для Sql сервера.
А так - либо человека ищи, либо на форуме проси помощи (авось коллективный разум поможет тебе) ...
Автор: EugeneBoss3
Дата сообщения: 05.11.2011 02:13
Знатоки, подскажите, плиз, как програмно очистить лог транзакций Microsoft SQL Server(сжать)?
Обязательно ли для этого отключать пользователей от сервера?
Автор: wasilissk
Дата сообщения: 05.11.2011 11:00
EugeneBoss3
Ссылка
Автор: EugeneBoss3
Дата сообщения: 06.11.2011 01:54
wasilissk
Спасибо за ссылку, но на второй вопрос я там ответа не нашёл.
Обязательно ли для этого отключать пользователей от сервера?
Автор: wasilissk
Дата сообщения: 06.11.2011 08:54
EugeneBoss3
Ответ на второй вопрос с той самой ссылки

Цитата:

Устранение неполадок
Операция сжатия заблокирована

Операции сжатия могут быть блокированы транзакцией, запущенной с уровнем изоляции, основанном на управлении версиями строк. Например, если в процессе продолжительной операции удаления, запущенной с уровнем изоляции, основанном на управлении версиями строк, запущена операция DBCC SHRINK DATABASE, операция сжатия будет ждать завершения работы операции удаления. В этом случае операции DBCC SHRINKFILE и DBCC SHRINKDATABASE выводят информационное сообщение (5202 для SHRINKDATABASE и 5203 для SHRINKFILE) в журнал ошибок SQL Server каждые 5 минут в течение первого часа, а затем по одному сообщению каждый час.

....

Это означает, что операция сжатия блокируется транзакциями моментального снимка, которые имеют временные метки старше, чем метка 109, представляющая последнюю транзакцию, завершающую операцию сжатия. Это также показывает, что столбцы transaction_sequence_num или first_snapshot_sequence_num в динамическом административном представлении sys.dm_tran_active_snapshot_database_transactions содержат число 15. Если столбцы transaction_sequence_num или first_snapshot_sequence_num в представлении содержат число, меньшее, чем последняя транзакция, выполненная операцией сжатия (109), то операция сжатия будет ждать завершения этих транзакций.

Разрешить эту проблему можно, выполнив следующие действия:
- Прервите выполнение транзакции, блокирующей операцию сжатия.
- Прервите операцию сжатия. Если операция сжатия прервана, любая завершенная работа сохранена.
- Пока операция сжатия ожидает завершения блокирующих транзакций, ничего делать не нужно.
Автор: MagistrAnatol
Дата сообщения: 24.11.2011 11:58
Народ, подсобите с запросом
Table1 - мастер таблица
FIO
...
Table1_ID

Table2 детал таблица
Table1_ID,
Table2_ID,
Kolvo
........
Table2_ID

Table3 справочник наименований
Tovar_Name
.....
Table3_ID

Table4
Tovar_Type_Name
Tovar_Type может быть от 1 до 6
Table4_ID

Так вот надо составить запрос и разместить данные по горизонтали в зависимости от Tovar_Type
типа такой таблички
| Tovar_Type=1 | Tovar_Type=2 | .... | Tovar_Type=6 |
FIO|TovarName|Kolvo|TovarName|Kolvo| .... |TovarName|Kolvo|
Автор: wasilissk
Дата сообщения: 24.11.2011 12:07

Код:
select
FIO FIO1, TovarName TovarName1, Kolvo Kolvo1,
'' FIO2, '' TovarName2, '' Kolvo2,
....
where Tovar_Type=1
UNION ALL
select
'' FIO1, '' TovarName1, '' Kolvo1,
FIO FIO2, TovarName TovarName2, Kolvo Kolvo2,
....
where Tovar_Type=2
.......
Автор: MagistrAnatol
Дата сообщения: 24.11.2011 14:13
wasilissk
подкоректируй мой запрос , а то что-то у меня не то выходит
select
fio FIO1,
type_name type_name1,
oboryd_name oboryd_name1,
sum(kolvo) kolvo1
from abo

left join abo_oboryd on abo.abo_id=abo_oboryd.abo_id
left join spr_oboryd on abo_oboryd.spr_oboryd_id=spr_oboryd.spr_oboryd_id
left join spr_oboryd_type on spr_oboryd.spr_oboryd_type_id=spr_oboryd_type.spr_oboryd_type_id
where spr_oboryd_type.spr_oboryd_type_id=1
group by fio1,type_name1,oboryd_name1

UNION ALL
select
"FIO1","type_name1","oboryd_name1",kolvo1, - ругается на ету строку
Column unknown. FIO1.



fio FIO2,
type_name type_name2,
oboryd_name oboryd_name2,
sum(kolvo) kolvo2
from abo

left join abo_oboryd on abo.abo_id=abo_oboryd.abo_id
left join spr_oboryd on abo_oboryd.spr_oboryd_id=spr_oboryd.spr_oboryd_id
left join spr_oboryd_type on spr_oboryd.spr_oboryd_type_id=spr_oboryd_type.spr_oboryd_type_id
where spr_oboryd_type.spr_oboryd_type_id=4
group by fio2,type_name2,oboryd_name2

такой запрос присобачит справа от FIO1,type_name1,oboryd_name1,kolvo1 - FIO2,type_name2,oboryd_name2,kolvo2 ????????
Автор: wasilissk
Дата сообщения: 24.11.2011 15:40
MagistrAnatol
Ты немного не понял там не "FIO1", а '' FIO1, т.е. пустая строка с алиасом FIO1.
Т.о. получим

'Иванов', 'тип1', '', '', ....
'', '', Петров, 'тип2', '', ''''
Хотя после твоих поправок я понял, что нужно в одной строке получить что-то вроде
'Иванов', 'тип1', 'Петров', 'тип2'
Если так, то нужно просто развернуть таблицу, это можно сделать примерно таким запросом

Код:
select t1.name name1, t2.name name2, t3.name name3, t4.name name4
from table1 t1
LEFT JOIN table1 t2 ON t2.type = 2
LEFT JOIN table1 t3 ON t3.type = 3
LEFT JOIN table1 t4 ON t4.type = 4
where t1.type = 1
Автор: MagistrAnatol
Дата сообщения: 24.11.2011 16:30

Цитата:
Но это четыре фулскана, одной и той же таблицы

не 4 а 6 , просто юзверям хочется видеть отчет как он у них реализован в екселе
в отчете пока проблематично, пока не выходит создать крос отчет в фастрепорте
если брать только одно поле мастер таблицы, то все норм, ну а мне надо выводить дофига полей и данные не верные.
в идеале
Цитата:
нужно просто развернуть таблицу

если можно реализуй на запросе
fio FIO1,
type_name type_name1,
oboryd_name oboryd_name1,
sum(kolvo) kolvo1
from abo

left join abo_oboryd on abo.abo_id=abo_oboryd.abo_id
left join spr_oboryd on abo_oboryd.spr_oboryd_id=spr_oboryd.spr_oboryd_id
left join spr_oboryd_type on spr_oboryd.spr_oboryd_type_id=spr_oboryd_type.spr_oboryd_type_id
where spr_oboryd_type.spr_oboryd_type_id=1
group by fio1,type_name1,oboryd_name1
мне надо получить 6 разворотов
type_name type_name1,
oboryd_name oboryd_name1,
sum(kolvo) kolvo1
в зависимости от spr_oboryd_type.spr_oboryd_type_id=1 - 2,3,,,6
Автор: wasilissk
Дата сообщения: 24.11.2011 16:39
MagistrAnatol
Давай лучше DDL таблиц, я не могу понять процитированного кода.
Автор: MagistrAnatol
Дата сообщения: 25.11.2011 07:55
wasilissk
держи http://rghost.ru/31916651
правда ето для файребирда, но логика от сервера не поменяется


Добавлено:
wasilissk
вариант с юнион не совсем подходит,у меня с мастер таблицы кроме фио надо выводить ещо с десяток
полей и построить отчет с 10-ю одинаковыми полями, но большая часть из которых будет пустая очень тяжело если вообще реально, хотя если потрах... по настоящему моно конечно в отчете сделать FIO1+FIO2+.....

всем принявшим участие огромный сенкс
вот запрос с sql.ru, мож кому пригодиться

select t1.fio,
max(case when p.produktid = 1 then p.produkt end) as Pr1,
sum(case when p.produktid = 1 and t3.isvkl = 0 then t3.kvo else 0 end) Pr1_vkl,
sum(case when p.produktid = 1 and t3.isvkl = 1 then t3.kvo else 0 end) Pr1_vikl,

max(case when p.produktid = 2 then p.produkt end) as Pr2,
sum(case when p.produktid = 2 and t3.isvkl = 0 then t3.kvo else 0 end) Pr2_vkl,
sum(case when p.produktid = 2 and t3.isvkl = 1 then t3.kvo else 0 end) Pr2_vikl,

max(case when p.produktid = 3 then p.produkt end) as Pr3,
sum(case when p.produktid = 3 and t3.isvkl = 0 then t3.kvo else 0 end) Pr3_vkl,
sum(case when p.produktid = 3 and t3.isvkl = 1 then t3.kvo else 0 end) Pr3_vikl
from produkt p
join table1 t1 on 1 = 1
left join table3 t3 on t3.produktid = p.produktid and t3.table1id = t1.table1id
group by 1
Автор: wasilissk
Дата сообщения: 25.11.2011 10:08
что-то типа такого

select TYPE_NAME1, FIO1, OBORYD_NAME1, KOLVO1,
TYPE_NAME2, FIO2, OBORYD_NAME2, KOLVO2,
...

from ABO a0

left join (
select ao1.ABO_ID ABO_ID1, st1.TYPE_NAME TYPE_NAME1, a1.FIO FIO1, so1.OBORYD_NAME OBORYD_NAME1, SUM(ao.KOLVO) KOLVO1
from ABO_OBORYD ao1
left join ABO a1 on a1.ABO_ID = ao1.ABO_ID
left join SPR_OBORYD so1 on so1.SPR_OBORYD_ID = ao1.SPR_OBORYD_ID
left join SPR_OBORYD_TYPE st1 on st1.SPR_OBORYD_TYPE_ID = so1.SPR_OBORYD_TYPE_ID
where st1.SPR_OBORYD_TYPE_ID = 1
group by ao1.ABO_ID
) t1 on ABO_ID1 = a0.ABO_ID

left join (
select ao2.ABO_ID ABO_ID2, st2.TYPE_NAME TYPE_NAME2, a2.FIO FIO2, so2.OBORYD_NAME OBORYD_NAME2, SUM(ao.KOLVO) KOLVO2
from ABO_OBORYD ao2
left join ABO a2 on a2.ABO_ID = ao2.ABO_ID
left join SPR_OBORYD so2 on so2.SPR_OBORYD_ID = ao2.SPR_OBORYD_ID
left join SPR_OBORYD_TYPE st2 on st2.SPR_OBORYD_TYPE_ID = so2.SPR_OBORYD_TYPE_ID
where st2.SPR_OBORYD_TYPE_ID = 2
group by ao2.ABO_ID
) t2 on ABO_ID2 = a0.ABO_ID

...

group by a0.ABO_ID
Автор: MagistrAnatol
Дата сообщения: 29.11.2011 10:00
Народ, можно как-то в селекте задать какие колонки выводить по условию ???
Автор: bigsloth
Дата сообщения: 29.11.2011 10:05
MagistrAnatol
Не понимая вашей задачи сложно сказать, но возможно, вам нужна конструкция вида CASE WHEN ... THEN ... ELSE ... END
Автор: EugeneBoss3
Дата сообщения: 09.12.2011 02:44
Знатоки, подскажите в чём может быть причина ошибки MS SQL2005:
"Невозможно подключиться к БД. Проверьте настройки соединения"
имя сервера, логин и пароль - правильные. Сеть настроена и работает без проблем.
Автор: bigsloth
Дата сообщения: 09.12.2011 05:54
EugeneBoss3
Какое приложение подключается? Судя по тексту ошибки - эту ошибку возвращает приложение, а не sql server.
Как вариант, в SQL Server Configuration manager/Surface Area Configuration проверить, что разрешены удаленые подключения к SQL Server и включен протокол, который используется приложением для подключения.
Автор: ekemov
Дата сообщения: 09.12.2011 06:41
EugeneBoss3
БД может ненастроена на сетевой режим или запрещено из вне подключения. Возможно кто то порт БД блокирует, что очень часто бывает.
Автор: EugeneBoss3
Дата сообщения: 09.12.2011 22:33
bigsloth
ekemov
Проблема возникла после попытки сжать БД изменить структуру таблицы в БД с помощью внешнего приложения (инсталлятора). Ранее так-же делали изменения в БД с помощью внешнего инсталлятора, проблем не было. Алгоритм подключения к БД был прежний, с одним исключением - были отключены все клиенты.
Автор: perceptron
Дата сообщения: 09.12.2011 22:35
2EugeneBoss3: опишите подробней проблему
Автор: bigsloth
Дата сообщения: 10.12.2011 10:36
EugeneBoss3
Присоединяюсь к perceptron. Опиши подробнее.
Попробуй подключиться к своему SQL Server с помощью SQL Server Management Studio и посмотри в каком сейчас состоянии та БД, с которой производили все эти действия.
Автор: perceptron
Дата сообщения: 10.12.2011 21:35
2EugeneBoss3:
Если вы меняете структуру таблиц, в которых работают пользователи то неуидивительно, что ругается
Если дело не доходит до соединения, то хотелось бы узнать
ещё бы версию ОС и строку соединения к базе вашу бы увидеть для ясности...


Автор: EugeneBoss3
Дата сообщения: 13.12.2011 22:47
Ситуация следующая.
Поддержку нашей АСУ осуществляют разработчики через дополнительные обновления, присылаемые по email'у.
Обновления, где не требуется отключение пользователей от сервера проходят без проблем, но когда разработчики требуют отключения пользователей от сервера возникает ошибка подключения к БД.
Мы пробовали два варианта: выход пользователей из приложения, использующего сервер и отключение сетевого кабеля от сервера. В обоих случаях ошибка подключения к БД.

Операционная система Windows Server 2008
Сеть доменная.
Сервер - MS SQL Server 2005
Часть программного кода, в которой осуществляется проверка подключения к БД в приложении, присланная разработчиками:
osql /S имя_сервера /U имя_пользователя /P пароль /d имя_БД
Ни мы ни разработчики не могут понять причины ошибки! Алгоритм подключения к БД не изменялся.
Автор: BlackVetal
Дата сообщения: 14.12.2011 04:57
EugeneBoss3
непонятно что вы обновляете - АСУ или SQL базу
Если SQL базу - возможно нет прав доступа у пользователя и поэтому нет подключения к БД.
Если АСУ - возможно все-таки ошибки в строке подключения или ... вообще тяжело предположить - мало инфы.

Страницы: 1234567891011121314151617181920212223242526272829

Предыдущая тема: Генератор 10-ти разрядных ключей


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.