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

Отличается результат работы ХП от результата при её отладки

$
0
0
Приветствую.
Не могу понять, почему происходит такая жуть.
При запуске кода, который содержится в хранимой процедуре, задавая предварительно нужные параметры, получаю в результате требуемые данные, они упорядочены так, как нужно. А при выполнении этой хранимой процедуры через exec получаю другие данные. Внутри кода ХП собираются данные во временные таблицы и результирующий запрос такой:
select * from #report_table
order by Id, RecNo, GroupNo

Пример результата, полученного после запуска кода хранимой процедуры:
Id	RecNo		GroupNo		Numer
1	1		1		6303005
2	2		1		6303005
3	3		1		6303005
4	4		1		6303005
5	5		1		6303005
6	6		1		6303005
7	7		1		6303005
8	8		1		6303005
9	9		1		6303005
10	10		1		6303005
11	11		1		6303005
12	12		1		6303005
13	13		1		6303005
14	14		1		6303005
...

А это пример результата, полученного после запуска хранимой процедуры через exec:
Id	RecNo		GroupNo		Numer
1	1		1		6303005
2	2		1		2006094
3	3		1		73461
4	4		1		6534373
5	5		1		163225
6	6		1		125142
7	7		1		4995140
8	8		1		6303005
9	9		1		2006094
10	10		1		73461
11	11		1		6534373
12	12		1		163225
13	13		1		125142
14	14		1		4995140
...

Помогите, пожалуйста, конструктивным советом. Спасибо.

Вставка строк, clustered index

$
0
0
Есть БОЛЬШАЯ таблица:
create table [BigTable]
(
    [id] bigint identity(1,1)
   ,[SourceID] int not null
   ,[Field1] varchar(10) not null
   ,[Field2] varchar(10) not null
   ,[Field3] varchar(10) not null
   ,[BegTime] datetime not null
   ,[EndTime] datetime not null
   ,[Count] int not null
   ,constraint [PK_BigTable] primary key clustered ([SourceID],[Field1],[Field2],[Field3])
)

В поле [SourceID] были значения от 1 до 300, за исключением 50-55.
До недавнего времени, update/insert в указанную таблицу проходил достаточно быстро. Затем стали доступными источники данных 50-55 и тут понеслось: вставка сотни тысяч строк длится НЕПРИЕМЛЕМО долго.
Если я правильно понимаю, причина в отсутствии незанятого места в кластерном индексе и для вставки SQL-серверу нужно каким-то образом его получить. Fill factor по-умолчанию - 0. Подскажите, как решить проблему?

Помощь в восстановлении базы

$
0
0
Добрый вечер форумчане!
Вчера на форуме уже писал что недавно полетела база, восстановить у меня ее не получается (навыков не хватает)
Прошу помощи в восстановлении базы за вознаграждение, база не очень большая (132 мб - mdf и 70 мб - Log)
Восстановление нужно произвести сегодня, для проверки вышлю скрипт результат которого будет подтверждением восстановления базы. После чего сразу оплачиваю услугу.
Ссылка на ранее опубликованный пост

JSON в MSSQL2016

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

Изучаю работу с JSON
функция JSON_MODIFY для модификации значений в JSON строке

JSON_MODIFY ( expression , path , newValue )

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


Если, я чтото не правильно понял, покажите где почитать....

Благодарю.

реально такое сделать в sql ?

$
0
0
вообщем есть сумма 42612,45

и есть ряд (ок. 100) других сумм (45,12; 456,11; 111;88 итд) и поле datetime

вопрос: можно ли сказать сумма каких чисел может дать 42612,45 ?

Изменение данных в xml

$
0
0
declare @x xml = '<order><request Id="3356571310" UnitName="" UnitCode="" />
  <Samples>
    <Sample Id="0" BarCode="3356571310">
      <Orders>
        <Order val="tel" />
        <Order val="email" />
      </Orders>
    </Sample>
  </Samples>
</order>'

select @x


Доброго вечера.
Подскажите как без использования replace заменить значение у Id на например 100 если его значение 0.
Спасибо.

Округление до ближайшей большей половины, или большего целого. см. Пример

$
0
0
есть замеры: нужно получить:
1 1,5
1,2 1,5
1,3 1,5
1,4 1,5
1,5 1,5
1,8 2
1,6 2
1,1 1,5

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

Резервное копирование и архивация базы

$
0
0
Всем доброго времени суток. Передо мной возникла задача архивировать некую базу c помощью скрипта, а так же с последующей архивацией базы при помощи 7z и все это при помощи одного единственного bat-файла.


В наличии виртуальная машина на VirtualBox c Windows 7 sp1 x32.
Установлен MS SQL Server 2005
Работать необходимо в MS SQL Server Management Studio Express

Скрипт кое-как написал и сохранил с формате .sql
Скрипт работает.

Declare @pathName Nvarchar(512)
Set @pathName = 'C:\1\base_name_' + convert(varchar(8),+ getDate(),112)+ '.bak'

Backup database [Base_name] to disk =@pathName with noformat, noinit, name ='Base_name', skip, norewind, nounload, stats = 10
GO

Собственно стоит вопрос в организации самого батника.
Возникло несколько вопросов, а именно:
1. Как обратиться к этому скрипту
2. Как настроить архивацию скопированной базы в определенную папку(включая обращение к самому архиватору 7z)
3. Удаление файла скопированной базы

Спасибо.

Ошибка на update -String or binary data would be truncated

$
0
0
Добрый день! Есть таблица (претензии)- Claim_Head, при попытке изменить значение поля IdStatus(int, null) :
update Claim_Head Set IDStatus = 1 Where  IdClaim=3910 

Ошибка String or binary data would be truncated???

Check constraint and udf-function - нарушение целостности

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

1. Заинтересовался вот этим вот обсуждением темы на stackoverflow
Обсуждение темы

Пытаюсь понять причины почему у человека получается обойти check constraint.

2. В ответе от Vladimir Baranov на сайте указано:

Vladimir Baranov
If two threads run the fnCheckUserConcurrentAssignment function at the same time, they will get the same count from Tasks. Then each thread will proceed with inserting the row and the final state of the database would violate your constraint.

If you want to keep your approach with the function in the CHECK constraint, or the trigger, you should make sure that your transaction isolation level is set to SERIALIZABLE. Or use query hints to lock the table. Or use sp_getapplock to serialise calls to your function/trigger.


Но мне в этом ответе не понятно вот что. Как я знаю check constraint срабатывает уже после того, как строчка вставлена в таблицу.
Как будет реагировать функция вызванная из check constraint на строку, которая вставляется в другой сессии (с учетом, что уровень read committed).
Помогите мне, пжл, понять, правильно ли приведен ответ и почему.

Способы получения Id

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

Есть задача добавлять записи в чужую базу.
Заметил что Id поля числовые,но сделаны не автоинкрементом, хотя выглядят именно так(новая Id отличается на +1, от предыдущей).
Натравил Trace, нашел insert, Id в него передается уже готовая.
Перед insert`ом, ничего такого не заметил, но запросов очень много.

Как это может работать? Что искать\проверять?

Результат процедуры в файл BCP

$
0
0
Всех с наступающим новым годом!
Написал процедуру результатом которой является xml. На MSDN прочитал статью про BCP и пытаюсь с ее помощью сохранить результат выполнения в файл. В процедуре используется временная таблица, при вызове процедуры через Менджмент студио все ровно, а вот при использование BCP ошибка:

Error = [Microsoft][SQL Server Native Client 10.0][SQL Server]Invalid object name '#repo_start'.


Есть идеи как это вылечить, кроме замены временной таблицы на переменную с типом таблицы?

Проблемы с подвисаниями клиентских машин после перехода с MS SQL Server 2000 на 2008 R2

$
0
0
Собственно, вынужденно и в спешке, пришлось в конце года переходить с антикварной машины с MS SQL Server 2000 на новый, но необустроенный сервер с MS SQL Server 2008 R2. На сервере крутится несколько баз, с которыми работают клиентские программы. ISUF и EOD, если кому-то что-то сказали эти названия. Буквально в тот же вечер, обнаружилось, что клиентские машины, работающие с сервером, необъяснимым образом подвисают на произвольное время от половины, до нескольких минут, потом отвисают и работают дальше. Перестаёт отвечать эксплорер, но каких-либо сбоев не выдаётся. Методом исключения, пришли к выводу, что корень зла, программа EOD, принимающая документы в электронном виде и заливающая их в базу. В логах MS SQL постоянно вылезают следующие строки:

Date,Source,Severity,Message
12/26/2016 17:59:23,spid69,Unknown,Setting database option RECOVERY to SIMPLE for database ******2016_Farch.
12/26/2016 17:59:23,spid69,Unknown,Setting database option RECOVERY to RECMODEL_70BACKCOMP for database ******2016_Farch.
12/26/2016 17:59:23,spid69,Unknown,Setting database option RECOVERY to SIMPLE for database ******2016_Farch.
12/26/2016 17:59:23,spid69,Unknown,Setting database option RECOVERY to RECMODEL_70BACKCOMP for database ******2016_Farch.
12/26/2016 17:59:22,spid69,Unknown,Setting database option RECOVERY to SIMPLE for database ******2016_Farch.
12/26/2016 17:59:22,spid69,Unknown,Setting database option RECOVERY to RECMODEL_70BACKCOMP for database ******2016_Farch.
12/26/2016 17:55:17,Backup,Unknown,Database was restored: Database: ******2016_FArch<c/> creation date(time): 2016/12/16(15:38:25)<c/> first LSN: 12912:24:37<c/> last LSN: 12912:40:1<c/> number of dump devices: 1<c/> device information: (FILE=2<c/> TYPE=DISK: {'E:\Backup\******2016_FArch-1726-12-2016'}). Informational message. No user action required.
12/26/2016 17:55:17,Backup,Unknown,Restore is complete on database '******2016_FArch'. The database is now available.

Бэкап выполнен руками, а вот пачка смен RECOVERY появляется сама по себе, с интервалом около 5 минут. Насколько можно судить, именно в этот момент, пользователи, как либо обращающиеся к серверу подвисают.

Пожалуйста, помогите решить проблему!

MicrosoftProfilerTrace

$
0
0
Всем привет!
Обращаять к DMV
SELECT * FROM $SYSTEM.DISCOVER_SESSIONS 
where SESSION_LAST_COMMAND_END_TIME < SESSION_LAST_COMMAND_START_TIME
or SESSION_STATUS = 1
order by SESSION_READ_KB desc

вижу, что от учетки NT AUTHORITY\SYSTEM запущен профайлер.

<Subscribe xmlns="http://schemas.microsoft.com/analysisservices/2003/engine" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">	
<Object>		
	<TraceID>MicrosoftProfilerTrace1482764663</TraceID>	
</Object>
</Subscribe>


Периодически киляю такую ссесию, но через некоторое время профайлер снова запускается.

Нужно понять, что запускает профайлер.
Никто не сталкивался?

Reporting Services настройка панели параметров

$
0
0
Добрый день, коллеги.
Скажите, куда смотреть, где настраивать, может есть хороший материал на просвещение.
Необходимо редактировать панель параметров, очередность параметров это понятно.
Каким образом можно перемещать параметры на пространстве панели, менять размер?
Как можно задавать логические условия, например: в зависимости от выбранной булевой переменной на панели, активна определенная выборка или в выпадающем списке выбора разные списочные переменные.

Заранее благодарен.

Контроль изменения структуры БД ms sql

$
0
0
Добрый день!
Интересует алгоритм контроля бд между Prod и Test . Как лучше сделать , где хранить изменения ? Может кто посоветует ПО .

Добавление агрегатной функции тормозит group by

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

Есть две таблицы

create table A (id1 int not null, id2 int not null, valueA numeric(15, 2), 
                    PRIMARY KEY CLUSTERED(Id1, Id2)
)

create table B (id1 int not null, id2 int not null, valueB int, 
                    PRIMARY KEY CLUSTERED(Id1, Id2)
)


В таблице A около 30000 записей, в таблице B - 50 000 000

Пишу

select 
       B.id1
     , B.id2
     , sum(A.valueA * B.value2)
from 
       A
       inner join B on A.id1 = B.id1 and A.id2 = B.id2     
group by 
       B.id1, B.id2
order by
       B.id1, B.id2


Если строчки sum(A.valueA * B.value2) нет, выполняется где-то за 30 сек, если ее добавить - 12 минут. В первом случае работает поиск по индексу, во втором - индекс скан и в плане вижу что 77% приходится на "вложенные циклы" с диким количеством записей.

Вопрос: что это и как бороться?

MDS 2016 SP1 Business Rule Extension

$
0
0
MDS 2016 SP1 Business Rule Extension - хранимуа процедура

у кого-нибудь получилось написать процедуру, в которой бы, например,
для атрибута Region записывалось значение UPPER(Region)
или
для атрибута DateOfSome записывалось значение GETDATE()

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

$
0
0
Всем доброго утра. Объясните, пожалуйста, как работает этот запрос:

DECLARE @t TABLE (pole NVARCHAR(100))
INSERT INTO @t VALUES ('тест')
INSERT INTO @t VALUES ('тест ')
INSERT INTO @t VALUES ('тест2')
INSERT INTO @t VALUES ('тест3')
SELECT * FROM @t WHERE pole = 'тест '


Почему при выборке поля значения с пробелом в конце, он выбирает 2 значения, а не одно?
Для него, это одно и тоже???

И как сделать так запрос, чтобы он различал пробел в конце и значение без пробела в конце?
Всем спасибо за ответы.

Найти ближайшие бОльшие значения в таблице Sql

$
0
0
Здравствуйте!
Такая задача. Есть 2 таблицы в одной значения забиты не точно. Нужно их сверить со значениями в другой таблице.
Если таких же значений нет, то нужна строчка с самыми ближними бОльшими значениями. Пример таблиц на картинке. Нужно это сделать в MS Sql.

Вот что-то пыталась, но не тот результат

Select MIN(Таблица 2.диаметр 1) as д1, min(Таблица 2.диаметр 2) as д2, MINТаблица 2.замер) as зам
from Таблица 2 inner join Таблица 1 ON
Таблица 2.диаметр 1>= Таблица 1.диаметр 1
AND
Таблица 2.диаметр 2>= Таблица 1.диаметр 2
AND
Таблица 2.замер>= Таблица 1.замер

Подскажите, пожалуйста, может кто-то знает. Спасибо!
Viewing all 7251 articles
Browse latest View live