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

отменить восстановление базы данных по журналу

$
0
0
доброе время суток, коллеги!

на старом сервере ms sql server 2008 r2 половину времени (и ресурсов машины) тратил на восстановление базы данных.
поэтому был куплен новый сервер Raid массивом дисков.
2008 r2 установили на новый комп, скопировали базы данных
но программа продолжает восстанавливать базы!
ограничивая доступ и мешая работать

что мне сделать, чтобы отключить восстановление?

заранее спасибо

Поиск тектса в коде VIEW и SP

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

казалось бы чего проще :

SELECT len(view_definition) as len1 , * FROM  INFORMATION_SCHEMA.VIEWS
where 
charindex( 'TEESNAP_transaction_custom_payment_method' , cast( view_definition as text) ) !=0
-- view_definition like '%custom_payment_method%' 

повыдавало чего то
смотрю НЕ все - поиском в FAR выдало еще кое-что
копирнул из SSMS - Смотрю обрезает до 4000

Сильно подозреваю что там где искомый текст встретился после 4000 и не нашло.

Есть какой-то способ искать по всему тексту View по метаданным ?


PS Про references знаю
но тут одноименные таблицы есть в 3 схемах lnd , stage , dwh и надо найти быстро все ссылки на них во view , SP

Проблема соединения с сервером

$
0
0
Здравствуйте!
У меня опит работы с MSSQL совсем нет, но из-за проблемы хостинга вынужден отказаться от Firebird.
Программа на Delphi удалённо соединяется с сервером MSSQL 2005. Через SSMS свободно соединяется а через Delphi (FDConnection)-никак.
у меня установлен MSSQL 2005 и соответственно sqlncli.dll находится в папке System32, но потом установил SSMS 2012 и он в папке System32 добавил sqlncli11.dll. Не знаю сейчас что сделать- удалить только sqlncli11.dll или польностью деинсталлировать MSSQL? А как потом работать без MSSQL?
кроме этого, мой порт 1433, а порт сервера 1450. Может здесь причина?

в FireDac Connection Editor eсли в SERVER пишу:

185.163.200.13\SQLEXPRESS,1450 или 185.163.200.13,1450 выводит:
[Firedac][Phys][ODBC][Microsoft][SQL SERVER Native client 11.0][SQL Server] Invalid Object Name 'SyS DATABASES':

а eсли пишу 185.163.200.13\SQLEXPRESS выводит: Expired TimeOut

Время выполнения запроса

$
0
0
Народ,
Не могу понять одну вещь,
есть процедура на сервере которая возвращает набор данных клиенткому приложению.
Если эту процедуру запускать на компютере клиента из остнастки SQL Query Analyser (SQL 2000) он выполняется мгновенно и возвращает результирующий набор из 20 ти записей.
Но если эту же процедуру вызывать из клиентского приложения
= SQLEXEC(gnConnHandle, [EXEC MainReport , ?StDate, ?endDate'], (.SQL_Orders))
и если период примерно 1 месяц то напрочь все зависает ....
Грешил на формат даты, препробовал и так и сяк
'2017-11-01 07:00:00.000', '01112017'....
В чем может быть проблема?
Всем спасибо за любую мысль.

Пребразование из строки в дату и стиль преобразования

$
0
0
Наблюдаю вот такую картину:
select convert(datetime, '31/12/2017', 103) union all
select convert(datetime, '31-12-2017', 103) union all
select convert(datetime, '31.12.2017', 103)

-----------------------
2017-12-31 00:00:00.000
2017-12-31 00:00:00.000
2017-12-31 00:00:00.000

select convert(datetime, '2017.12.01', 103)
-----------------------
2017-01-12 00:00:00.000

select convert(datetime, '2017.12.31', 103)
-----------------------
Msg 242, Level 16, State 3, Line 6
The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

Вопрос по первым трем селектам: согласно хелпу, стиль 103 - это маска вида дд/мм/гггг. Почему сервер спокойно переваривает разделители, которых в этой маске нет (дефис и точка)?
Вопрос по второму селекту: в стиле 103 год - последние 4 символа. Однако сервер вытащил год из первых 4 символов, а остальные разбирал в порядке, определенном стилем (сначала день, потом месяц) - почему?
Третий селект, видимо, ведет себя так же, как и второй, и при попытке преобразовать 31 в месяц выдает ошибку. Здесь вопрос тот же, что и ко второму селекту.
По вышеприведенной ссылке, да и вообще в гугле ответов на эти вопросы не нашел.

UPDATE 12 секунд

$
0
0
Добрый вечер
столкнулся с неприятной ситуацией, когда в каскаде процедур нужно обновить одну маленькую, но очень важную таблицу.
Таблица простая...
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[account](
	[id] [int] IDENTITY(1,1) NOT NULL,
	[user_id] [int] NOT NULL,
	[amount_open] [int] NOT NULL,
	[amount_freez] [int] NOT NULL,
	[transaction_id] [int] NOT NULL,
	[status_id] [smallint] NOT NULL,
	[amount_request] [int] NOT NULL,
 CONSTRAINT [PK_account] PRIMARY KEY CLUSTERED 
(
	[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[account] ADD  DEFAULT ((0)) FOR [amount_open]
GO

ALTER TABLE [dbo].[account] ADD  DEFAULT ((0)) FOR [amount_freez]
GO

ALTER TABLE [dbo].[account] ADD  DEFAULT ((0)) FOR [transaction_id]
GO

ALTER TABLE [dbo].[account] ADD  DEFAULT ((1)) FOR [status_id]
GO

ALTER TABLE [dbo].[account] ADD  DEFAULT ('0') FOR [amount_request]
GO


и вот, в одной из процедур мне надо обновлять эту таблицу, обновить amount(ы) да ид транзакции, по ИД записи, но процедура утыкается в это обновление и валиться, причём в рандомное время на рандомном ИД что совсем обидно. Естественно всё что после обновления не проходит это заставляет в субботу искать правды по форумам.

Понимаю что что то лочит таблицу, но врага таинственного не могу найти.
Таблица то меньше чем 20 000 записей.

Поделитесь идеями что можно сделать?

результат запроса нулевой, хотя значения есть

$
0
0
Народ,
подскажите в чем причина: почему результат нулевой, хотя заказы из 77 региона в 50 точно есть в БД?




select  b1.ORDER_CUSTOMER, b1.SOURCE_LOCATION, b1.DEST_LOCATION
from  table b1
 JOIN table a1 ON b1.SOURCE_LOCATION=a1.LOCATION_ID 
 JOIN  table a2 ON b1.DEST_LOCATION=a2.LOCATION_ID
where a1.PROVINCE_CODE='77'
and a2.PROVINCE_CODE='50'





также хочу заметить, что таблица с локациями одна (table a2 = table a1)

атач базы и версия сиквела

$
0
0
предположим ситуацию
делаем детач базы из 2008 сиквела,затем атач в 2016 сиквел
если теперь сделать детач из 2016 то получится приатачить в 2008?

Вопросы по Select

$
0
0
Дана таблица:

create table dbo.statistics 
(login    varchar(64),
send_date date, 
sms_cnt   int )


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

Ожидаемый результат:
| login | min_date | max_sms_cnt | max_date |min_sms_cnt |
+-------+----------+-------------+----------+------------+
|login1 | 20150411 | 15154       | 20151012 | 10         |
|login2 | 20150301 | 20          | 20160513 | 8          |


Мой запрос, правильно ли:

select 
      [login], min(send_date) mindate, max(sms_cnt) maxcnt,
      max(send_date) maxdate, min(sms_cnt) mincnt
from [dbo].[statistics] (nolock)

Если неправильно помогите пжл с запросами как правильно)

Sql dateadd вопросы

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

create table dbo.statistics 
(login    varchar(64),
send_date date, 
sms_cnt   int )


Нужно написать запрос, возвращающий логины(login) и суммарный трафик(sms_cnt) всех логинов, которые рассылались более 7 дней.

Мой запрос
select 
      [login], sum([sms_cnt]) [total]
from  [dbo].[statistics] (nolock)
where [send_date] < dateadd(day,-7,getdate())
group by [login]
order by 2  


Если неправильно помогите пжл с запросами как правильно)

выбор строк с разными значениями

$
0
0
Добрый день, вы не могли бы пожалуйста подсказать как сделать запрос к таблице?

Есть таблица с множеством строк из которых мне нужны только две, я делаю запрос:

select "Столбец А", "Столбец Б"
from table

и получаю таблицу такого вида:

Столбец А Столбец Б
Amy host1
Bob host2
Carl host3
Andy host4
Amy host9999
Carl host3
Carl host3
Andy host4
Andy host8888
Bob host2

Далее мне необходимо вывести только те строки, где значения в Столбец Б отличаются с привязкой к Столбец А, т.е. на выходе должна появиться таблица:

Столбец А Столбец Б
Amy host1
Amy host9999
Andy host4
Andy host8888

Как видно, запрос вывел только те строки, где Столбец Б по ходу таблицы был разный с привязкой к Столбец А и не вывел строки с Bob и Carl, т.к у них Столбец Б всегда был одинаковый.

Попробовал сделать через

select "Столбец А", "Столбец Б"
from table t1
where exists (select "Столбец А", "Столбец Б"
from table t2
where t1."Столбец Б"<>t2."Столбец Б"
and t1."Столбец А"=t2."Столбец А"
and t1."Столбец Б"=t2."Столбец Б")

но результат пустой, хотя я точно знаю, что имеются строки, где Столбец Б различается относительно Столбец А.

Помогите пожалуйста разобраться

Вопрос по запросу. Соединение таблиц

$
0
0
Здравствуйте!

Изучаю структуру базы данных для Microsoft Dynamic AX 2009 и пишу SQL-запрос для выгрузки отгрузок, возвратов и продаж из базы данных путем соединением таблиц CUSTINVOICEJOUR и CUSTINVOICETRANS.

Declare @StartDate date ='2017-08-10'
Declare @EndDate date ='2017-08-10'

SELECT	
	*
FROM
	CUSTINVOICEJOUR
INNER JOIN
	CUSTINVOICETRANS
ON
	CUSTINVOICEJOUR.RECID=CUSTINVOICETRANS.RECID
WHERE	
	(CUSTINVOICEJOUR.INVOICEDATE >= @StartDate AND CUSTINVOICEJOUR.INVOICEDATE <=@EndDate)	
	AND
	CUSTINVOICEJOUR.ORDERACCOUNT='00001грд'

Я немного запутался и есть сомнение: те ли я использую таблицы в запросе для выгрузки данных об отгрузках и возвратах? Если те, то те ли колонки использую для соединения? Что еще в фильтре надо указывать типа статусы накладных, вычерки и т. д.?

Задать БД по умолчанию

$
0
0
Добрый день.
Подскажите, как задать БД по умолчанию в SQL Server Management Studio?
Надоело перед каждым запросом прописывать USE.
Раньше так и было, поменяли компьютер - устанавливали все заново и вот теперь по умолчанию БД будто бы не задана..
Всё время нужно писать, к какой именно БД ты обращаешься. При том, в 99% случаев - эт всегда одна и та же БД, поэтому было бы удобно использовать ее по умолчанию.

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

Использование данных в столбце за предыдущий период

$
0
0
Здравствуйте добрые люди.
Подскажите пожалуйста.
Есть данные 3х столбцов dt, A1, B2
Как написать запрос:
Если dt >= '01.11.2017' , то в качестве данных по А1 использовать данные по А1 только за январь 2017 года?

Написал:
SELECT IIF dt, (t1.dt >= '01.11.2017', t2.A1, t1.A1) as A1, B2
FROM table as t1
LEFT JOIN ( SELECT dt, A1
FROM table
WHERE dt between @bdt and @edt ) as t2 ON t1.dt = t2.dt
В ноябре как раз меняет значение А1 , но только на null. В принципе понятно почему. Но не понятно как надо чтобы брались январские значения?

BCP и разделитель "|"

$
0
0
Доброго времени суток. Может кому то встречалась проблема. Задача выгрузить данные в csv. Казалось бы нет проблем

bcp "Integration.dbo.T_ColorVend_InsUpd" out "C:\test\T_ColorVend_InsUpd.csv" -c -C RAW -U "ExtRequests" -T -S XDAX -t\; это работает

Но заказчик требует что бы разделитель был "|" (вертикальная черта)

bcp "Integration.dbo.T_ColorVend_InsUpd" out "C:\test\T_ColorVend_InsUpd.csv" -c -C RAW -U "ExtRequests" -T -S XDAX -t\|

и вот тут bcp генерит ошибку

Сообщение 50000, уровень 16, состояние 1, процедура ХХХ, строка 64
Ошибка экпорта данных в файл T_ColorVend_InsUpd.csv

хотя TecNet вроде не возбраняет использование этого печатного символа в качестве разделителя. может я что то не вижу или не знаю ? Заранее спасибо за ответы.

Conversion failed when converting date and/or time from character string. При update.

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

Надо проапдейтить одну таблицу Table1 по условиям из другой таблицы-справочника ParamsTable.
В ParamsTable свалка из всяких разных значений разных типов(по логике разных) хранящихся в одном varchar поле param_value

Идентификация типа параметров в справочнике идет по полю PType.
В поле param_value нужного мне типа содержится дата в виде '31/12/2017' остальные значения ненужных мне типов содержат все что угодно, т.е. convert(datetime, param_value, 103) выдаст ошибку.

В итоге такой апдейт
	update t
		set flag = 1	
	
	from	Table1  t    
        inner join  ParamsTable p on  p.tid=t.tid  and p.PType in (1,2,3) 
	where convert(datetime, p.param_value, 103) > @max_date	

выдаст ошибку Conversion failed when converting date and/or time from character string.

Вопрос: почему, и как этого избежать?
В таблице ParamsTable значение поля param_value при условии PType in (1,2,3) заведомо рабочие, и если вывести все значения
нужных типов с преобразованием select convert(datetime, p.param_value, 103) from ParamsTable p where p.tid=t.tid and p.PType in (1,2,3)
то ошибок не будет.

По идее условие в where должно отрабатывать уже после join и мусорных записей другого типа туда не должно попасть.

Как сделать одну View с разными условиями для разных пользователей?

$
0
0
Хочу сделать View, в которой выполнялись бы разные фильтры для разных пользователей. Фильтры должны задаваться пользователями (из стандартного набора). Сложность в том, что, как правило, пользователи запускают на одном и том же компьютере несколько копий приложений с разными фильтрами, причем именно для того, чтобы использовать разные фильтры. Пытался заносить параметры фильтров в отдельную таблицу и выбирать их оттуда по SPID (по имени пользователя и имени компьютера не подходит по указанной ранее причине), но оказалось, что Access открывает разные сессии для разных запросов.
ХП меня не устраивает, потому что мне не нравится как с ними работает Access (большие задержки перед началом вывода данных).
Подскажите, как можно передать параметры фильтра во View?
Заранее премного благодарен.

Миграция данных при обновлении ПО

$
0
0
MS SQL 2012
Помогите пожалуйста с ВЕРНЫМ алгоритмом по миграции данных из одной БД в другую

Имеется небольшой call-центр по приему/записи звонков от клиентов на основе Oktell
В базу пишутся информация о всех поступающих звонках (длительность, номер телефона, путь к звуковому файлу,...), а сами звуковые файлы кладутся по папкам

Все это сейчас хранится в таблицах БД пронумерованными типа
Calls_1
Calls_2
...
Calls_n

каждая такая содержит звонки за определенный месяц

Нужно эту информацию перенести в Новую базу данных и отредактировать поле "путь к звуковому файлу" т.к. в Новой БД развернута на другом серваке. В Новой БД эти таблицы идентичны по структуре и пусты

Подскажите наиболее БЫСТРЫЙ и простой способ по копированию данных из множества таблиц (в каждой таблице сотни тысяч записей) из одной БД в идентичные Таблицы по структуре, но в другой БД

И дальнейший апдейт ЧАСТИ значений одного из поля в новых таблицах.
Нужно значение поля Path будет заменить на новое, т.к. файлы я вручную скопирую на сервер БД

например "с:\calls_1\sound.wav" на другую ЧАСТЬ "d:\target\sound.wav"
т.е. часть пути нужно будет изменить на НУЖНЫЙ


Бредовая ли у меня идея сделать это через
Insert INTO Select
?

наподобие
SET @Number_Table int = 1
SET @End_Table int  = 12

Begin
WHILE @Number_Table < @End_Table  
  BEGIN
    SET @query = 'Insert into New.Calls_' +CAST(@Number_Table AS varchar(2)) + 'select * from Old.Calls_'+CAST(@Number_Table AS varchar(2))
    EXEC(@query) 
    SET @Number_Table=@Number_Table +1
 END
END

Не выполняется план обслуживания, разностное копирование

$
0
0
Исходные:
Microsoft SQL Server 2012 - 11.0.2100.60 (X64) Feb 10 2012 19:39:15 Copyright (c) Microsoft Corporation Standard Edition (64-bit) n Windows NT 6.2 <X64> (Build 9200: )
Баз 10 штук.

Планы обслуживания:
full_monthly(полный бэкап) - раз в месяц, хранить за 6 месяцев
diff_weekly(разностный бэкап) - раз в неделю, хранить за 1 месяц
diff_daily(разностный бэкап) - раз в сутки, хранить 1 неделю
jor_daily(журнал бэкап) - каждые два часа в период с 09:00 по 19:00

Содержание планов обслуживания full_monthly, diff_weekly, diff_daily:
1) Проверка целостности базы данных
2) Перестроение индекса
3) Обновление статистики
4) DBCC FREEPROCCACHE
5) Резервное копирование
6) Очистка после обслуживания
7) Очистка журнала

Содержание планов обслуживания jor_daily:
1) резервное копирование
2) очистка после обслуживания
3) очистка журнала

Работало как часы до определенного момента. Проблема в том что изначально не рассчитал объем под бэкапы, ошибся, в результате не уследил переполнился диск с бэкапами, далее за счет этого журналы забили диск с базами. Сделал shrink логов БД. Проверил вручную планы по запускал все - работают. Когда же планы должны автоматически отрабатывать по расписанию, то не работают разностные, при этом полные и журналы спокойно выполняются по расписанию. Проблема именно с разностными и именно по расписанию.

То есть порядок проверки:
1) делаем ручной запуск плана обслуживания full_monthly - успех
2) тоже diff_weekly - успех
3) тоже diff_daily - успех
4) тоже jor_daily - успех

Если дожидаться расписания:
1) full_monthly - успех
2) diff_weekly - ошибка
3) diff_daily - ошибка
4) jor_daily - успех

Ошибки в SSMS:
-1073548784
Сбой выполнения запроса "BACKUP DATABASE [MYBASE] TO DISK = N'B:\\SQL_Bac..." со следующей ошибкой: "Не удается выполнить разностное резервное копирование для базы данных "MYBASE", так как не существует ее текущей резервной копии. Произведите полное резервное копирование базы данных, выполнив инструкцию BACKUP DATABASE без параметра WITH DIFFERENTIAL.
BACKUP DATABASE прервано с ошибкой.". Возможные причины сбоя: проблемы с этим запросом, свойство "ResultSet" установлено неправильно, параметры установлены неправильно или соединение было установлено неправильно.
T-SQL по данной ошибке:
BACKUP DATABASE [MYBASE] TO  DISK = N''B:\SQL_Backup\MYBASE\diff_daily\MYBASE_backup_2017_12_12_001956_5159782.bak'' WITH  DIFFERENTIAL , NOFORMAT, NOINIT,  NAME = N''MYBASE_backup_2017_12_12_001956_5159782'', SKIP, REWIND, NOUNLOAD,  STATS = 10
GO


По журналам просмотр событий Windows, раздел приложения:
Ошибка 12.12.2017 0:32:21 MSSQLSERVER 3041 Резервное копирование
SQL Server Scheduled Job 'MYBASE_diff_daily.ВложенныйПлан_1' (0x8534412C9FF07544A5582930ADC67C3F) - Status: Ошибка - Invoked on: 2017-12-12 00:25:55 - Message: Не удалось завершить задание. Запуск задания был произведен Пользователь sa. Последним выполнявшимся шагом был шаг 1 (ВложенныйПлан_1).

Ошибка 12.12.2017 0:32:21 SQLISPackage110 12291 Отсутствует
Package "MYBASE_diff_daily" failed.

Предупреждение 12.12.2017 0:32:22 SQLSERVERAGENT 208 Job Engine
Операция BACKUP не выполнила команду BACKUP DATABASE MYBASE WITH DIFFERENTIAL. Проверьте дополнительные сообщения в журнале приложения резервного копирования.

Сложение значений одного часа

$
0
0
Добрый день всем!
Есть следующая таблица: ID, PointID, DateValue, Hour(часы - от 1 до 24), StatValue.
Мне нужно сложить значения столбца StatValue с группировкой по часам - то есть суммы всех значений первого часа, затем всех значений второго часа и так далее. Уже голову сломал. помогите плиз :)
Viewing all 7251 articles
Browse latest View live