Quantcast
Channel: SQL.ru: Microsoft SQL Server
Viewing all 7251 articles
Browse latest View live

Интеллектуально парсим имя.

$
0
0
Всем привет, и хорошей рабочей недели!

Натолкнулся на классическую классический косяк. Есть одна система-поставщик данных для другой системы( MS CRM).
В худших в лучших традициях, на форме указания данных о клиенте- физике, ФИО вводится в одно единственное поле.

В большинстве случаев, когда мы парсим более менее русских клиентов, проблемы нет. Parsename вполне справляется.

Но как только приезжает "Рахматулин Артур Салтынбек оглы" или "Винсент ван дер Берг Николаевич", всё разваливается.

Как бы таких сложных персонажей более-менее разумно разруливать?

Как сжать таблицу?

$
0
0
Есть таблица.

Как ее сжать?

Не удаляя данные.

Значения столбца превратить в названия других столбцов

$
0
0
Всем доброго дня. Замучилась искать ответ, поэтому напишу новое сообщение.

MS SQL 2000.

Есть таблица такого вида:

запрос
Select PropName, PropValue from MyTable


PropNamePropValue
Операционная система Майкрософт Windows 8.1 Профессиональная
Оперативная память 2047.18 Mb
Домен mytest
Имя компьютера Ivanov
Версия DirectX 4.09.00.0904
HDD Диск 1: 465.76 Gb MB0500EBNCR ATA Device
HDD Диск 2: 149.05 Gb ST3160813AS ATA Device
Логические диски C: 97.31 Gb (свободно 69.64 Gb)
Логические диски F: 149.04 Gb (свободно 73.51 Gb)


Из этих данных необходимо получить вот такую таблицу (перевернуть данные, из первого столбца должны быть названия всех других столбцов):

Операционная системаОперативная памятьДоменИмя компьютераВерсия DirectXHDDHDDЛогические диски Логические диски
Майкрософт Windows 8.1 Профессиональная2047.18 MbmytestIvanov4.09.00.0904Диск 1: 465.76 Gb MB0500EBNCR ATA DeviceДиск 2: 149.05 Gb ST3160813AS ATA DeviceC: 97.31 Gb (свободно 69.64 Gb)D: 368.10 Gb (свободно 243.64 Gb)


Всем удачного дня и заранее спасибо за ответы.

восстановление

$
0
0
Добрый день

Имеется Виртуальный сервер с windows 2012 и SQl 2012, удалил диск с Базой Данных (вместо резервного).
База продолжает работать, я так понимаю что все пишется в логи.
На тестовом сервере восстановил из ночного бэкапа данные.

Теперь собственно вопрос Как из имеющегося SQL Server Database Transaction Log File (.ldf) перенести имеющиеся данные на тестовый сервер. Потеря сегодняшних данных не допустима.
Останавливать службу сервера и тем более перезапуск компа, я так понимаю приведет к остановке работы приложения.
Пробовал провести резервное копирование транзакционных логов с рабочего сервера. не получилось, так как там пользователи сидят и сервер не смог получить монопольный доступ (тут есть вариант, через монитор активности всех выгнать, но только в вечернее время).

CLR Загрузка веб страниц

$
0
0
Sql server 2014 12.0.5000.0 64x
внешняя написана на VS C#
Написан загрузчик веб страниц.
Подключён.
Работает, но даже при загрузке яндекса может выдать за 1 сек может за 5,а может и ничего не выдать
с ошибкой примерно через 40-50сек.
Есть антивирус НОД останавливал его, отключал фаервол результат тот же.
через браузер на серваке входит на ресурсы без проблем.
Опрашиваемые ресурсы разные общедоступные, но как результат из 10 раз удачно опрашиваю в 2-3 случаях, остальное ошибка.
даже цбр курсы иногда отваливаются, но значительно реже.
Видел у кого то, что прокси может что то дописывать, но у меня его нет, сервак напрямую в инете (через роутер).

Сообщение 6522, уровень 16, состояние 1, строка 1
Произошла ошибка .NET Framework во время выполнения определяемой пользователем подпрограммы или агрегатной функции "htmlGetWithCredentials":
System.Net.WebException: Невозможно соединиться с удаленным сервером ---> System.Net.Sockets.SocketException: Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера ip:80
System.Net.Sockets.SocketException:
в System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
в System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Exception& exception)
System.Net.WebException:
в System.Net.HttpWebRequest.GetResponse()
в network.htmlGetWithCredentials(SqlString UriString, SqlString poststring, SqlString Encoding, SqlString login, SqlString password)

вот функция уже взята из примера в инете, но результат тот же:
[Microsoft.SqlServer.Server.SqlFunction(DataAccess = DataAccessKind.Read)]
public static SqlString htmlGetWithCredentials(SqlString UriString, SqlString poststring, SqlString Encoding,SqlString login,SqlString password)
{
WebRequest request = WebRequest.Create((string)UriString);
request.Timeout = int.MaxValue;
if ((string)login != "")
request.Credentials = new NetworkCredential(
Convert.ToString(login),
Convert.ToString(password));
request.Method = "GET";
((HttpWebRequest)request).UserAgent = "CLR web client on SQL Server";

SqlString document = "";
WebResponse resp = (WebResponse)request.GetResponse();
System.IO.Stream dataStream = resp.GetResponseStream();
System.IO.StreamReader rdr = new System.IO.StreamReader(dataStream);
document = (SqlString)rdr.ReadToEnd();

        // Close up everything...
        rdr.Close();
dataStream.Close();
resp.Close();
return document;
}

как удалить несколько таблиц после их поиска в БД?

$
0
0
Всем привет. Такой вопрос - Осуществляю поиск нескольких таблиц в БД по части их имени с помощью like '%%'.

select * from sys.tables where name like '%test%'

Как переписать запрос чтобы удалялись все таблицы из sys.tables в чьих именах есть %test% ?

Какой смысл использовать int вместо Date в хранилищах данных?

$
0
0
Всем привет,

скачал тестовую базу AdventureworksDW2016CTP3.
Там в таблицах используется OrderDateKey вместо даты. Какой в этом смысл?

Дата занимает 3 байта, int - четыре. Плюс неудобно делать манипуляции типа Year(OrderDateKey) или month(OrderDatekey). Зачем все это?

Автоматическое удаление в процедуре обновления таблицы

$
0
0
Добрый день.
Ставлю удаление в процедуру, висит на WAITFOR DELAY '00:00:05', не могу понять в чем дело, до этого отлично отрабатывало.
	if DATEPART(hour,getdate())=16 and datepart(MINUTE,getdate()) between 00 and 15

        DECLARE @today datetime = dbo.DATEONLY(GETDATE()); 
        DECLARE @lastday datetime = DATEADD(MONTH, -3, @today); 
        
        WHILE EXISTS( SELECT 1 FROM [dbo].[Manh_SHIPMENT_DETAIL] WHERE  DATE_TIME_STAMP < @lastday )  

        BEGIN 
                DELETE [dbo].[Manh_SHIPMENT_DETAIL] WHERE internal_shipment_line_num in ( 
                        SELECT TOP 500000 internal_shipment_line_num FROM [dbo].[Manh_SHIPMENT_DETAIL] 
                        WHERE DATE_TIME_STAMP < @lastday and DC = @currentDC
                        ORDER BY 1 
                ); 
                WAITFOR DELAY '00:00:05'; 
        END;


@currentDC задается на каждом шаге, всего их 4.
Если нужно могу скинуть полный текст процедуры.

Как поддерживать сортировку в колоночном индексе при загрузке новых данных?

$
0
0
Всем привет,

выяснил, что если колоночный индекс отсортирован по нужному полю, то результат работы запроса сильно увеличивается. Хотелось бы узнать, как можно поддерживать сортировку в колоночном индексе?

Давайте пример. Делаем выборку из таблицы, где 15,5 миллионов записей:
SELECT count(*) as Quantity
  FROM [tbl_test]
where (DATE1 between '20170401' and '20170430')

/*
SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 2 ms.
SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.

(1 row(s) affected)
Table 'tbl_test'. Scan count 1, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 432, lob physical reads 0, lob read-ahead reads 727.
Table 'tbl_test'. Segment reads 6, segment skipped 2.

 SQL Server Execution Times:
   CPU time = 15 ms,  elapsed time = 43 ms.
*/


Видно что CPU time = 15 ms. При этом он прочитал 6 сегментов и пропустил 2.
Чтобы отсортировать таблицу по дате надо создать обычный кластеризованный индекс, а затем колоночный.
create clustered index CCI_tbl_test_table
	on dbo.tbl_test (DATE1)
	with (DROP_EXISTING = ON);

create clustered columnstore index CCI_tbl_test_table
	on dbo.tbl_test
	with (MAXDOP = 1, DROP_EXISTING = ON);


Результат выборки:
SELECT count(*) as Quantity
  FROM [tbl_test]
where (DATE1 between '20170401' and '20170430')

/*
SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.
SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.
SQL Server parse and compile time: 
   CPU time = 2 ms, elapsed time = 2 ms.
SQL Server parse and compile time: 
   CPU time = 0 ms, elapsed time = 0 ms.

(1 row(s) affected)
Table 'tbl_test'. Scan count 1, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 17, lob physical reads 0, lob read-ahead reads 27.
Table 'tbl_test'. Segment reads 1, segment skipped 7.

 SQL Server Execution Times:
   CPU time = 0 ms,  elapsed time = 4 ms.
*/


Видно, что CPU time = 0, и он пропустил 7 сегментов, а прочитал всего 1. Вот это меня и интересует.
Как можно поддерживать сортировку в колоночном индексе, чтобы при загрузке новых данных такое выполнение и дальше продолжалось?

Спасибо.

Обработать файл CSV с лишними строками

$
0
0
Добрый день! Парсю файл csv , через OPENROWSET и файл формата fmt , конец файла определяю через "\n" . Когда нет лишних строк - проблем нет. Качается в базу, когда есть через "Enter" - ещё строки после строк с данными, то выдается ошибка:

Cannot fetch a row from OLE DB provider "BULK" for linked server "(null)".

Руками конечно можно поудалять лишние пустые строки, но это гемор!
Как можно решить проблему (не брать пустые строки), чтобы импорт не падал!

поиск пользователя AD по манагеру

$
0
0
SELECT * FROM OpenQuery ( 
  ADSI,  
  'SELECT displayName, telephoneNumber, mail, mobile, facsimileTelephoneNumber , manager, samaccountname
  FROM  ''LDAP://****/DC=****,DC=**'' 
  WHERE objectClass =  ''person''
  and manager = ''*Шпитун Владимир Сергеевич*''
  ') AS tblADSI
ORDER BY displayname 

не получается задать фильтр поиска по менеджеру
Что бы ни писал в " and manager = ''*Ч*''" - ничего не ищет
Писать во Where в постобработке - не подходит, большой набор данных в AD, и он не вытягивается в SQL

Найти плохую запись

$
0
0
есть определенный запрос, он падает на приведении строки к гуиду. Падает соответственно на какойто строке, так как он рабочий и долго работал нормально. Но чтото пошло не так. Как записать в лог ту строку на которой падает? try catch может както?

PG Day'17

$
0
0
05-07 июля 2017 года в Санкт-Петербурге пройдет PG Day'17 Russia - четвертая официальная российская конференция, посвященная вопросам эксплуатации баз данных.

05 июля состоятся интенсивные учебные курсы для небольшой аудитории (продолжительность - полдня или один рабочий день). Всех специалистов, работающих с MS SQL Server, может заинтересовать следующий тренинг:
- SQL Server за один день

Программа мероприятия полностью утверждена: SQL Server за один день .

Для участников форума предлагаем воспользоваться промо-кодом SQLRU, дающим скидку 10% на мастер-классы и основные дни конференции.

Рады ответить на ваши вопросы по мероприятию.

триггер с отправкой POST

$
0
0
Скажите, а можно ли создать триггер в SQL2012, чтобы по insert в определённую таблицу, он формировал некое уведомление с отправкой POST-запроса?

Запрос по 1 таблице с сопоставлением данных в этой же таблице.

$
0
0
Здравствуйте. Подскажите пожалуйста как быть с 1 запросом. Есть одна таблица
id name parentID
12 folder1
13 folder2 12
14 folder3 12
---
id - всегда уникальный
name - имя
parentID - ссылка на первый id, т.е. как бы корневой элемент
---
как можно получить таблицу вида
name parentID
folder1
folder2 folder1
folder3 folder1
т.е. parentID заменить именем согласно id.

SQL Server Compact 4.0, парсинг XML

$
0
0
Здравствуйте, подскажите пожалуйста, как в SQL Compact можно значение xml вида
<r eid="6040d92d-e286-f4f9-a613-ed0e6fd241e1"><name><resId>DbSetup_measureUnitPortion_short</resId></name><fullName><resId>DbSetup_measureUnitPortion_full</resId></fullName><kind>Portion</kind><revision>759407</revision><deleted>false</deleted><id>6040d92d-e286-f4f9-a613-ed0e6fd241e1</id></r>

получить значение только "DbSetup_measureUnitPortion_short" из тегов <resId> </resId> ?
Конструкция которой пользуюсь в полноценном SQL
select CAST(cast(Xml as xml).query('/r/node()') as nvarchar(max)) FROM entities

- тут не работает
как можно это сделать?

помогите решить проблему с sql2008 и 1с 8.1

Сильно тупит база

$
0
0
имеем MSSQL Server 2012. На серваке 128 гиг оперативы и 16 ядерный Xeon
Когда с базой работают 10-20 пользователей все летает. В реальном режиме эксплуатации (несколько тысяч активных пользователей, генерящих по 1 запросу / сек) все умирает

Что было исследовано:
1. Посмотрели диспетчер задач, все ядра нагружены на 100%
Использование памяти 50 гиг из 128. Запрос
select cntr_value/1024 [memory, mb] from sys.sysperfinfo 
where counter_name = 'Total Server Memory (KB)'

Возвращает вообще 38 гиг
Настройки буферного кеша - по умолчанию
2. Отсюда
https://www.sqlskills.com/blogs/paul/wait-statistics-or-please-tell-me-where-it-hurts/
взял запрос на события ожидания
2 топ событий ожидания CXPACKET 46% и RESOURCE_SEMAPHORE 36%

3. Запросом

SELECT TOP 10 SUBSTRING(qt.TEXT, (qs.statement_start_offset/2)+1,
((CASE qs.statement_end_offset
WHEN -1 THEN DATALENGTH(qt.TEXT)
ELSE qs.statement_end_offset
END - qs.statement_start_offset)/2)+1),
qs.execution_count,
qs.total_logical_reads, qs.last_logical_reads,
qs.total_logical_writes, qs.last_logical_writes,
qs.total_worker_time,
qs.last_worker_time,
qs.total_elapsed_time/1000000 total_elapsed_time_in_S,
qs.last_elapsed_time/1000000 last_elapsed_time_in_S,
qs.last_execution_time,
qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
ORDER BY qs.total_logical_reads DESC -- logical reads


Выявили что бОльшую часть времени база занимается 6 запросами. Каждый из 6 запросов выполняется в среднем более чем по минуте


Вопросы:
1. Правильная ли стратегия выявления проблемных мест?
2. Почему база не использует всю оперативную память? RESOURCE_SEMAPHORE говорит об ожидании выделения памяти под запрос, но свободной памяти то еще немерянно
3. Стоит ли ставить MDOP = 1?
4. Верно ли я понимаю, все усилия следует приложить на тюнинг проблемных запросов. Есть ли какие то общие стратегии тюнинга, например скормить каждый запрос Tuning Adviserу и применить все его советы
5. Индексы на таблицах в запросах сильно фрагментированы. Поможет ли перебилд индексов?

Подписки

$
0
0
Посоветуйте литертуру по созданию SUBSCRIPTION

Колоночный индекс на индексированном представлении

$
0
0
В документации
[url=]https://msdn.microsoft.com/ru-ru/library/gg492153.aspx[/url]
Прописано что columstore index “Не может быть создан для представления или индексированного представления.”
Однако если на представлении уже построен кластерный rowstore, колоночный индекс создается, но при этом в запросах никак не используется даже с явным указанием with (index (<columstore index>)). Получается двоякая ситуация, что создать вроде можно, но использовать нельзя. Понятно, что после создания кластерного rowstore индекса на представлены оно материализуется. Может есть, что по этой теме.
SQL Server 2016 SP1 CU3
Viewing all 7251 articles
Browse latest View live