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

Primary Key и группировка данных

$
0
0
Есть таблица до 1 млрд строк. Данные в них повторяются.
create table MySrcData 
(
   [PKField1] varchar(30) not null,
   [PKField2] varchar(30) not null,
   [PKField3] varchar(30) not null,
   [BegTime] datetime not null,
   [EndTime] datetime not null,
   [Field1] varchar(30),
   [Field2] varchar(30),
   [Field3] varchar(30),
   [Field4] varchar(30),
)

Требуется скопировать их в другую таблицу:
create table MyDstData
(
[PKField1] varchar(30) not null,
[PKField2] varchar(30) not null,
[PKField3] varchar(30) not null,
[BegTime] datetime not null,
[EndTime] datetime not null,
[Field1] varchar(30),
[Field2] varchar(30),
[Field3] varchar(30),
[Field4] varchar(30),
primary key clustered ([PKField1],[PKField2],[PKField3])
)
сгруппировав по [PKField1],[PKField2],[PKField3]. Если с [BegTime]/[EndTime] всё понятно: min() и max(),
то в [Field1],[Field2],[Field3],[Field4] нужно сложить самые свежие данные (где [EndTime] = max([EndTime])).
Как это правильно сделать?

Работа с CLR

$
0
0
Добрый день. У меня есть библиотека, задача которой распарсивать номер телефона и представлять его в отформатированном виде. После чего это значение добавляется в таблицу базы. Чтобы подцепить эту библиотеку нужно попутно подцепить еще 4 системные dll

System.ServiceModel.Internals.dll
SMdiagnostics.dll
System.Runtime.Serialization.dll
System.Runtime.DurableInstancing.dll

И вот я столкнулся с некой проблемой при использовании CLR. При каждом маломальском обновлении винды все приходится переподцеплять. Т.к. перестает работать по причине "библиотека прикрепленная к скл серверу отличается от той что в GAC". А windows 10 и windows server 2016 обновляются автоматически. Так что выход - отключите обновление не прокатит.

И вот получается что технология CLR хороша, но использовать ее очень не надежно и в случае очередного сбоя последствия в базе могут быть неустранимыми. Может есть решения этой проблемы? Я уже пробовал скопировать эти библиотеки в отдельную папку и оттуда их подцепить но после обновления все равно идет сравнения с тем что в GAC

Может правильно подцеплять прямо из C:\Windows\Microsoft.NET\assembly\GAC_MSIL ?

Создание сертификата подвязка к логину

$
0
0
Есть логины 1с и 1с2
создан сертификат в базе master + сделан бэкап

Теперь авторизую сертификат логин 1с к базе 1cb

Use 1cb

create CERTIFICATE CER1с
AUTHORIZATION 1c
FROM FILE = 'D:\1c\хххххххх1.cer'

Можно ли авторизовать несколько логинов или надо создавать мод каждый логин сертификат ?
Use 1cb
create CERTIFICATE CER1с
AUTHORIZATION 1с2
FROM FILE = 'D:\1c\хххххххх1.cer'
Пишет сертификат уже существует

Если ее еще варианты ??? Не очень хочется под каждый логин создавать сертификат

Можно ли определить количество новых строк после операции Insert

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

3 вопроса.

1. Как узнать количество новых созданных строк после операции Insert
2. Как узнать количество обновлённых записей после операции Update
3. Как узнать количество удалённых записей после операции Delete

Вопрос по округлению

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

Может кто-нибудь объяснить, почему в нижеприведенном коде round возвращает разные результаты?

declare @a float
select @a = 0.145
select round(@a, 2)

declare @b numeric(15, 3)
select @b = 0.145
select round(@b, 2)


Что характерно, 0.135 округляет одинаково

CLR, подписи сборок в хранилище главного узла и GAC различаются.

$
0
0
Доброго времени суток.

Состряпал класс на С# и хочу подключить его к базе (MS SQL serv 12). Проблемы возникли с подключаемыми, вместе с моей, сборками.
На сервере стоит microsoft net framework 4. multi-targeting pack. Обновил его до последней версии, библиотеки в C:\Windows\Microsoft.NET\Framework64\v4.0.30319 обновились до версии 4.0.30319.17929. Скопировал их все в папку с моей библиотекой и запустил импорт сборки. Сборка успешно импортировалась. Однако при запуске процедуры ругается -
Lookup Error - SQL Server Database Error: A .NET Framework error occurred during execution of user-defined routine or aggregate "solver_Main": 
Microsoft.SolverFoundation.Common.MsfSolverConfigurationException: Microsoft Solver Foundation plugin solver configuration exception. ---> System.IO.FileLoadException: Невозможно загрузить файл или сборку "System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" или один из зависимых от них компонентов. Подписи сборок в хранилище главного узла и GAC различаются. (Исключение из HRESULT: 0x80131050) Дополнительные сведения см. в статье 949080 базы знаний Майкрософт.
System.IO.FileLoadException: 
   в Microsoft.SolverFoundation.Services.PluginSolverCollection.<GetPluginSolverSection>d__7.System.IDisposable.Dispose()
   в Microsoft.SolverFoundation.Services.PluginSolverCollection.Initialize()
   в Microsoft.SolverFoundation.Services.PluginSolverCollection.CreatePluginSolverCollection()
Microsoft.SolverFoundation.Common.MsfSolverConfigurationException: 
   в Microsoft.SolverFoundation.Services.PluginSolverCollection.CreatePluginSolverCollection()
   в Microsoft.SolverFoundation.Services.SolverContext..ctor()
   в Microsoft.SolverFoundation.Services.SolverContext.GetSolverContext()
   в Microsoft.SolverFoundation.Services.SolverContext.GetContext()
   в Solver.solver_Main(SqlInt64 _sid)


Я пропустил какой то апдейт?



ПАЛЫЧ

Один и тот же запрос, разное время выполнения

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

Вопрос, почему один и тот же запрос, например - select * from table1 where colum1 = '1'
в первый раз выполняется за 0,275 - 0,350 мс, а в следующий раз за 0,050-0,075 мс.
Значения чередуются при каждом запросе, то больше, то меньше и ни когда два раза под ряд не имеем варианта
из большего диапазона, так и из меньшего.

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

С чем это может быть связано?

Использовал MS SQL Server 2008 и 2012, разницы нет.

Вопрос о лицензировании и не только.

$
0
0
Здравствуте коллеги. В настоящее время используем 1Сv7.7 (бухгалтерия) и 1С8.1 (зарплата-кадры и склад). Все крутится на разных серверах: 7-ка на MS SQL 2000, 8 на MS SQL 2008R2. Руководство поставило задачу на переход с 7 на 8. Осюда вопрос, как оптимальнее сконфигурировать систему. Пока только одна идея: выделенный сервер под сервер приложений 1С и сервер с MS SQL SERVER. Вего пользователей не более 250 чел. Подразумевается приобретение лицензий на MS SQL SERVER 2016 standart. Сколько лицензий необходимо приобрести: только на процессор (2 проца по 4 ядра), или на проц+CAL (для пользователей)? Серверов под MS SQL 2008 два, в будующем можно будет собрать из них кластер, тогда будет 4 процессора с 16 ядрами. Спасибо

Идентификатор сеанса сам себя блокирует

$
0
0
Добрый день, уважаемые форумчане!
Пришла беда - не заметил и как..
Суть в следующем:
У меня есть моя база в которой много моих хранимых процедур.
Одна из них обращаются, как к базам на этом же сервере, так и к линкованному серверу. При этом на текущем сервере запрос по всем базам делается достаточно быстро (3 минуты примерно).
Вся беда начинается, когда он обращается к линкованному серверу.
На него он заходит под специально созданной учеткой, со всеми правами.
До сегодняшнего понедельника у меня все работало и собирало. примерно 30 минут
А сейчас началось следующее - ждал 5 часов.
Зашел на второй сервер и открыл монитор активности. В процессах создалось куча одинаковых процессов.
Часть из них с состоянием Raning, часть Ranable, и много Suspended. (в приложенном файле скрин)
При этом последние блокируются тем же идентификатором.
Процессорное время делает скачок и постоянно поддерживает большое значение.
Ничего не собирает.
в ожидании ресурсов Buffer I/O максимум.
Сам ничего в настройках сервера не менял.
Никто тоже не сознается.
Из замеченных изменений:
1.Кто-то поставил Касперский серверный 10 консоль (удалил, ничего не изменилось);
2.Почему-то в настройках линкованного сервера изменилась учетка под какой заходить на него(тоже никто не сознается, что что-то сделал)
Подскажите пожалуйста куда копать по поводу ошибки...

Анализ висящего запроса

$
0
0
Коллеги, приветствую!
Есть база данных (sharepoint - wss_content).
Раз в час SharePoint запускает запрос, который висит часами, не может выполниться. Запросы накапливаются, начинаются блокировки и всё "встает".....

Запрос отыскал. Обновил статистику в таблицах(c опцией full), которые используются в запросе.
Удалил старый план выполнения.
Всё заработало, запрос выполняется от 20 до 30 сек.

Дня через 3 - история повторилась. Нашёл "плохой план", но не очень силен в анализе планов выполнения запросов.
Стоимость запроса увеличилась с 0,16 до 0,21. Index scan - нигде вроде не засветился. Сильно криминального - ничего не увидел...
Изменилась именно логика выполнения...но при этом изменилась как то весьма серьезно.

Прошу помощи, куда дальше копать, чтобы понять и исправить причину?
Как временное решения - думаю обновлять с помощью job'a статистику раз в день по ночам.
Т.к. база все-таки sharepoint'а - то опасаюсь сам туда добавлять дополнительные объекты, типа новых индексов....
Во вложении - сам запрос и "плохой" план выполнения....

Помощь с триггером

$
0
0
Здравствуйте.
Мне необходимо сделать запрос,который будет каждый раз заносить в ячейку "цена" рассчитанные значения которые нужно прописать в триггере.
У меня есть ряд и сеанс. У сеанса есть 3 категории,рядов у нас 20. Для каждого сеанса свой процент,который будет умножен на "стоимость" из таблицы "фильм". Допустим,утренний 10%,дневной 15%,вечерний 18%. С рядами такая же схема. 1-5-ряды 10% 6-10 8% 11-15 7% 16-20 5%. Надеюсь на вашу помощь.
Проще говоря. Когда выбираю ряд и сеанс,у меня в стоимости выводится подсчитанная сумма.
Вот часть кода что удалось составить:
create trigger raz
for insert 
as
begin
declare @a int
set a@ = (select код_билета from inserted)
declare @b int 
set @b = (select  код_фильма from inserted)
declare @c int
set @c = (select стоимость from Фильм where код_фильма = @b)
if (@d="1") then 
update Билет 
set цена = @c*(0,9)
update Билет
set цена = @c*(1,1)

end



Схема таблиц,для полного понимания задачи

Транспонирование таблицы и ограничения PIVOT

$
0
0
Всем доброго здоровья и хорошего настроения !
Есть задача: необходимо выбрать для сводного отчета данные, но при этом кол-во "суммарных" колонок заранее неизвестно. Кроме того, кол-во левых (сводных) колонок несколько. PIVOT явно не подходит. Попробовал все сводные колонки через разделитель объединять в одну (потом "внешним" запросом они разделяются на несколько исходных скалярными функциями) и сам запрос с PIVOT формировать как строку и выполнять EXECUTE, но в итоге получил совершенно несъедобный код на несколько экранов.
Как можно решать подобные задачи элегантнее ?

Спасибо за помощь и советы :)

Помогите решить задачи, пожалуйста

$
0
0
Привет !

Помогите, пожалуйста, решить задачи по SQL.

Задача 1

Таблица 1: Справочник полов - S_X

ID number not null - код пола

S_X varchar(1) - пол

ID S_X

1 M

2 Ж


Таблица 2: Список сотрудников - PERSON

ID number not null - код сотрудника

S_X_ID number not null - код пола

FIO varchar(100) - ФИО

Задача:

1. Получить запрос количества мужчин и женщин в организации.

2. Сделать запрос - определить отношение количества мужчин к количеству женщин.



Задача 2

Имеем:

Таблица 1: Справочник персональных атрибутов - ATTR

ID number not null - код атрибута

ATTR_NAME varchar(30) - наименование атрибута

Заполнение:

ID ATTR_NAME
1 Фамилия
2 Имя
3 Отчество
4 Табельный номер
5 Оклад

Таблица 2: Персональные данные - PERSON

ID number not null - код человека

ATTR_ID number not null - код атрибута

ATTR_DATA varchar(80) not null - значение атрибута

Пример заполнения:

ID ATTR_ID ATTR_DATA
1 1 Иванов
1 2 Сидор
1 3 Петрович
1 4 1122
1 5 100000
2 1 Сидоров
2 2 Петр
2 3 Иванович
2 4 1123
2 5 20000

Задача:

1) Вывести ведомость сотрудников, содержащую следующие столбцы: Табельный номер, ФИО.

При данных из примера заполнения должны получить следующее:

1122 Иванов Сидор Петрович
1123 Сидоров Петр Иванович

2) Выбрать 10 самых высокооплачиваемых сотрудников в порядке убывания оклада.


Спасибо, ребята ! :-)

Помогите с индексами, пожалуйста

$
0
0
Есть таблица с миллионом записей.
Cell - int
SubCell - int
SubSubCell - int
Data - int

У одной cell есть от 200 до 300 subcell
У subcell до 50 subsubcell

Нужно сложить все data группируя по cell и subcell
Выполнение занимает 30 секунд.
Какие индексы использовать?

создание хранимой процедуры

$
0
0
Нужна помощь в написании хранимой процедуры. Есть таблица Материал и представление Списание. В таблице есть поле "Количетсво на складе". В представлении есть поле "Количество". Нужно чтобы хранимка через update таблицы Материалы вычла из "Количества на складе" "Количество" списываемых вещей.

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

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

Сейчас много учётных записей, каждая привязана к работе с определённой БД. Под sa работает сис. админ. со всеми базами. Сейчас встал вопрос, чтоб на "всякий случай" не было доступа работы через sa если коннект к СУБД идёт через локальную сеть.

Можно ли ограничить?

временные таблицы как правильно делать?

$
0
0
День добрый. У меня вопрос по временным таблицам. Мне для лучшего понимания алгоритма удобно разбивать запрос на много мелких подзапросов и оформлять их результаты "временными" таблицами, а потом в результирующем запросе выбирать уже из них. Делаю это примерно так:
with Tbl1 as
(
select * from zzz
),
Tbl2 as
(
select * from Tbl1 left join xxx on xxx.fld1 = tbl1.fld
),
tbl3 as
(
 select ....
)

select * from tbl1
left join tbl2 on ...
left join tbl3 on ...

Подскажите так правильно делать, в смысле использовать with (я просто где-то увидел такую конструкцию и пользую ее, но есть подозрение что это не совсем правильно)? Может быстрее/оптимальнее использовать временные таблицы объявленные чрез declare (может запросы будут выполняться быстрее)? Или и так все ок?

Вывод данных если пусто

$
0
0
Подскажите, у меня есть запрос, и мне нужно сделать что когда нет записей выводить пусто

select ID, Name1, Name2, Status
from OZ
where ID = @ID

Как скриптами создать скриптами учётную запись с ограничениями прав?

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

В СУБД периодически добавляются новые базы (не так чтоб часто, но...), на каждую базу создаётся своя учётная запись, через которую работают все клиенты (программы). Делается ограничение, что новая учётная запись имеет полные права в рамках одной базы и полная блокировка на всё (в т.ч. на видимость через любого клиента) в других базах.

Сейчас привлекаю сис. админа., который всё это делает через MS, это долго... нудно и т.п.))...

Мне бы проще всего написать и когда надо выполнять скрипт, в котором и база создастся и доступ нужный назначаться. Создать, восстановить (и пр.) базу знаю как, но вот с правами беда(( ни разу не сталкивался (не админ я)) )

Подскажите, как скриптами создать новую учётную запись в субд и назначить ей полные права владения ТОЛЬКО определённой базой, и полностью закрыть доступ к другим в т.ч. видимость? По возможности пример не помешает.

Заранее спасибо!

Ограничения конструкции CASE ... WHEN

$
0
0
Добрый день.
Интересует вопрос - Кто-то сталкивался/есть ли в SQL ограничения на количество условий в CASE ?
Сейчас есть задача - соединить 2 таблицы (таблицу данных и таблицу условий), во второй таблице (таблице условий) от 500 до 1000 строк, причем условия соединения с каждой строкой второй таблицы будут разные.
Текст запроса будет заранее подготовлен.
Если поместить в CASE 500-1000 конструкций с выбором условия - это будет считаться грубой ошибкой и можно ли таким образом перегрузить SQL сервер ?
Viewing all 7251 articles
Browse latest View live