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

Полнотекстовый поиск

$
0
0
Здравствуйте.
Не устраивает качество полнотекстового поиска(FREETEXTTABLE) в MS SQL 2012
Поиск у MS SQL действительно такой плохой..?

Кто как решал эту проблему?

Где можно найти полный список queryruleoff ?

$
0
0
Добрый день!
Есть ли у кого ссылка на полный перечень queryruleoff указаний?

MS SQL 2014 оконные функции

$
0
0
Всем доброго дня!

Попалась задача, которую не могу выполнить.
Учусь работать в MSSQL 2014, но задание необходимо выполнить также и без оконных функций.

Формулируется оно так

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

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

Пример вывода


login min_date max_sms_cnt max_date min_sms_cnt
--------------------------------------------------------
|login1 | 20150411 | 15154 |20151012 | 10 |
|login2 | 20150301 | 20 |20160513 | 8 |



Я не понимаю, как задать условие для вывода связки "минимальная дата" - "максимальное кол-во смс". Получается связка "мин дата" - "соответствующее ей число смс".

Прошу подсказки, на что обратить внимание? Решать не прошу)
Заранее спасибо за любые советы и ссылки!

Ограничение БД в группе доступности

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

Скоро предстоит объединять БД в группы доступности. Интересует следующий вопрос: какие ограничения накладываются на БД в группе доступности?
Уже наткнулись, что нельзя пересоздавать брокера (ALTER DATABASE mydb SET NEW_BROKER).

Триггеры

$
0
0
Привет всем. Хочу сделать триггер, который выводит ошибку о вводе большем количестве символов, чем 25. Объясните, зачем в поле RAISERROR мы задаём два числа и что они значат? И в чём у меня логическая ошибка? Спасибо!

Create table Firs
(
ID_One int NOT NULL
PRIMARY KEY,
Name varchar(25) NOT NULL,
TelephoneNum decimal NOT NULL
)
GO

CREATE TRIGGER Trig_Ins
ON Firs

FOR INSERT
AS
IF EXISTS
(
SELECT *FROM Firs
WHERE Name>25
)
BEGIN
RAISERROR ('VI VVELI MNOGO SYMBOLS FOR YOU NANE',16,1) -- ???
ROLLBACK TRAN
END
GO

UPDATE Firs
Set Name = 'sdjkhjskdhjkjkjksjkhjkgjksjgkshdsd'
GO

в чем разница между begintime

$
0
0
немогу понять в чем разница между запросом вида
select * from BaseLineError with (nolock)
where begintime between '2016-08-10 00:00:00.000' and '2016-08-10 00:14:59.000'

и

DECLARE @DateTimeBegin datetime;
DECLARE @DateTimeEnd datetime;

set @DateTimeBegin = '2016-08-11 00:00:00.000'
set @DateTimeEnd = '2016-08-11 00:15:00.000'

select * from BaseLineError with (nolock)
where begintime between @DateTimeBegin and @DateTimeEnd


BaseLineError таблица большая > 10000000 и нагруженная транзакшн локами.
в первом случае запрос возвращается практически мгновенно . а во втором случае видно как сначала нагружаетса хард диск. чтото кэшируетса потом хард диск прекращает и за работу принимается процессор. и наконец результат.
по логике вещей все должно работать одинаково быстро.
спасибо.

http запрос через T-SQL

$
0
0
Добрый день
На стороне 1С поднят web-сервис, на PowerShell регулярно выполняются http запросы, и результаты выгружаются в JSON-файлы.

Пример PowerShell запроса:
+
$username = "login"
$password = "password" | ConvertTo-SecureString -asPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential($username,$password)

$ИБ1 = 'http://10.1.40.61/1C_Bases/hs/getting/login/password/'
$Запросы =
[string]::Concat('ВЫБРАТЬ  ...')

foreach ( in $Запросы)
{
    $Запрос = $ИБ1 + 
	$file =  'C:\1C.json'
	$a = Invoke-RestMethod $Запрос -Credential $cred -OutFile $file -TimeoutSec 600
}


Возникла идея, может возможно отправлять запросы с SQL Server, а результаты выгружать в его таблицы
Нашел в интернете процедуру:
+
CREATE procedure [dbo].[HTTP_Request] ( @sUrl varchar(200))
As
Declare
@obj int
,@hr int
,@msg varchar(255)

 exec @hr = sp_OACreate 'MSXML2.ServerXMLHttp', @obj OUT
if @hr <> 0 begin Raiserror('sp_OACreate MSXML2.ServerXMLHttp.3.0
failed', 16,1) return end

exec @hr = sp_OAMethod @obj, 'open', NULL, 'GET', @sUrl, false
if @hr <>0 begin set @msg = 'sp_OAMethod Open failed' goto eh end

exec @hr = sp_OAMethod @obj, 'setRequestHeader', NULL, 'Content-Type',
'application/x-www-form-urlencoded'
if @hr <>0 begin set @msg = 'sp_OAMethod setRequestHeader failed' goto
eh end

exec @hr = sp_OAMethod @obj, send, NULL, ''
if @hr <>0 begin set @msg = 'sp_OAMethod Send failed' goto eh end

 exec @hr = sp_OADestroy @obj
return
eh:
exec @hr = sp_OADestroy @obj
Raiserror(@msg, 16, 1)
return
GO


Для выполнения необходима авторизация сервера 1С
Как правильно выполнить эту процедуру с моим запросом, чтобы получить результат выгрузки?
Для примера вписал в @sUrl запрос в методе PowerShell Invoke-RestMethod, чтобы показать всю структуру запроса:

+
USE [AnalysisCRM]
GO

DECLARE    @return_value int

EXEC    @return_value = [dbo].[HTTP_Request]
    @sUrl = N'Invoke-RestMethod http://10.1.40.61/1C_Bases/hs/getting/login/password/ВЫБРАТЬ ... ГДЕ Период >=
 ДАТАВРЕМЯ(2016,08,01) И Период <= ДАТАВРЕМЯ(2016,08,03) -Credential New-Object
 System.Management.Automation.PSCredential(login,password)  -TimeoutSec 600'

SELECT  'Return Value' = @return_value
GO


Буду благодарен за подсказку

Как очистить список логинов при входе в MS SQL Studio 2014

$
0
0
Добрый день.
Коллеги, подскажите, как сделать, чтобы при входе в MS SQL Studio 2014 он перестал предлагать на выбр несколько логинов, а оставил только тот, который мне нужен (sa). А то каждый раз приодится выбирать sa из списка. Хотелось бы, чтобы в списке был только sa. Смотрите скриншот в аттаче.

Переделать select в update

$
0
0
Есть выборка документов по select нужно переделать в ubdate, что бы одно из полей заполнилось значением
Помогите пожалуйста: как колонку pars_povtor нужно проставить 8 цифру этим документам
Колонка pars_povtor находится в таблице link

SELECT
                `dd`.`id` AS `doc_id`, 
	l.*
FROM   `link` `l`
            LEFT JOIN `doc_data` `dd` ON dd.link_id = l.id AND dd.reestr_id = l.reestr_id
            LEFT JOIN `doc_ops_status` `dos` ON dos.id = dd.id
            WHERE
                l.reestr_id = 7
                AND (l.doc_html_file <> '' AND l.doc_html_file IS NOT NULL)
	AND dd.id IS NOT NULL
                AND dos.doc_updated <= l.parsed_date


картинка тут http://prntscr.com/c6bnu6

cmdkey и подключение к SQL Server с Windows authentication

$
0
0
Возможно ли подключение к SQL Server с Windows authentication, если оба компьютера не в домене ?

Используя cmdkey можно, например, подключить диск, посмотреть активные сессии/процессы на удалённом сервере.

C:\>ping -n 1 SERVER2

Pinging SERVER2.cpcr.ru [192.168.128.2] with 32 bytes of data:
Reply from 192.168.128.2: bytes=32 time=206ms TTL=125

Ping statistics for 192.168.128.2:
Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 206ms, Maximum = 206ms, Average = 206ms


C:\>cmdkey /list:SERVER2

Currently stored credentials for SERVER2:

* NONE *


C:\>query session * /server:SERVER2
Error 5 getting sessionnames
Error [5]:Access is denied.


C:\>cmdkey /add:SERVER2 /user:SERVER2\admintst /pass

CMDKEY: Credential added successfully.


C:\>query session * /server:SERVER2
SESSIONNAME USERNAME ID STATE TYPE DEVICE
console 0 Conn wdcon
rdp-tcp 65536 Listen rdpwd


C:\>query process * /server:SERVER2
USERNAME SESSIONNAME ID PID IMAGE
(unknown) console 0 0
system console 0 4 system
system console 0 664 smss.exe
system console 0 764 csrss.exe
system console 0 2028 svchost.exe
local service console 0 3024 logon.scr


C:\>sqlcmd -S SERVER2 -E -Q "select @@SERVERNAME, ORIGINAL_LOGIN()"
Sqlcmd: Error: Microsoft SQL Server Native Client 11.0 : Login failed for user ''. The user is not associated with a trusted SQL Server connection..


C:\>cmdkey /delete:SERVER2

CMDKEY: Credential deleted successfully.


C:\>query session * /server:SERVER2
Error 5 getting sessionnames
Error [5]:Access is denied.

Substring

$
0
0
Помогите изъять информацию между , 2-я символами на данный момент между символом * , т.е. как прописать script

6558559887*3A34567UPOP*20130526 = 3A34567UPOP , как изьять 3A34567UPOP , заранее спасибо

Размер базы данных

$
0
0
Помогите написать T-sql запрос для получения размера определенной базы данных. Чтоб выдавало только цифры и все. Помогите плиз

Cumulative update 8 for SQL Server 2014 SP1

Убрать задвоения делением

$
0
0
Всем добрый вечер. Господа эксперты, подскажите решение проблемы.
Суть: Есть некая вьюха, в которой обозначены суммы по документам, поставщикам и группам. Из этой вьюхи нужно отобрать группировку - товарная группа - сумма. Проблема в том что она составлена не корректно и сумма по документу в целом дублируется по каждой строчке с товарной группой. В запросе нужно разделить сумму по конкретной группе, по числу встречающихся номеров документов (скрин приложил). Я вроде бы через временные таблицы решил. А можно как-то изящнее в одном запросе? А то мне тянуть в Excel на XP, а там временные таблицы не поддерживаются

create table #t([Номер документа] numeric(15, 0), [Поставщик] nvarchar(50), [Товарная группа] nvarchar(50), [Сумма] numeric(15, 2))

insert into #t([Номер документа], [Поставщик], [Товарная группа], [Сумма])
values 
	(1, 'Поставщик1', 'Brend1', 5000),
	(2, 'Поставщик2', 'Brend33', 1000),
	(2, 'Поставщик2', 'Brend47', 1000),
	(2, 'Поставщик2', 'Brend15', 1000),
	(3, 'Поставщик 5', 'Brend2', 2000),
	(3, 'Поставщик 5', 'Brend3', 2000)

	select [Номер документа] nd, count([Номер документа]) cn into #tt from #t group by [Номер документа]
	select [Товарная группа], [Сумма]/#tt.cn
	from #t
	left join #tt on #t.[Номер документа] = #tt.nd
	group by [Товарная группа],[Сумма],#tt.cn
	drop table #t
	drop table #tt

Объединить таблицы

$
0
0
Доброго всем дня!
Есть 2 таблицы вида:

create table dbo.Rasp
(
ID int NOT NULL -- Просто ID-шник
, WD smallint NOT NULL -- Дни недели
, FIO varchar(50) -- ФИО человека
)

create table dbo.WeekDays
(
ID int NOT NULL -- ID дня недели
, WD_Name varchar(15) -- Название дня недели
)

Надо:
вывести полный список ФИО и для каждого ФИО все дни недели, т.е. например:
Иванов И. И. 1
Иванов И. И. 2
Иванов И. И. 3
Иванов И. И. 4
Иванов И. И. 5
Иванов И. И. 6
Иванов И. И. 7
Петров П. П, 1
Петров П. П., 2
Петров П. П., 3

Есть пока только вариант, кажущийся мне плохоньким.
select r.FIO
, r.WD
, w.WD_Name
from rasp r
inner join weekdays w
on r.WD = w.ID
UNION
select r.FIO
, w.ID
, w.WD_Name
from weekdays w
left join rasp r
on w.ID <> r.WD

Можно ли реализовать с помощью CTE?

Как загрузить текстовый файл в таблицу

$
0
0
Есть структурированный текстовый файл, поля разделены ";". Формат примерно такой.

Дата-время;штрихкод;поле1; поле2

Фаил периодически выгружается в сетевую папку. Нужно обновить таблицу базы ms sql: найти там поле штрихкода, совпадающее с текстовым файлом и вставить в эту строку таблицы поле1 и поле2.

В каком виде это все можно организовать? Есть ли для этого какие-то "готовые" решения? Подойдут ли для этого утилиты bulc и bcp, или они подходят только для вставки? Как лучше сделать?

Команда GO в хранимой процедуре

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

Пример:

use [Base]
go

IF OBJECT_ID('p_reports') IS NOT NULL DROP PROCEDURE [p_reports]
go

CREATE PROCEDURE [dbo].[p_reports] 
AS
 EXEC xp_cmdshell '1'
 GO
-- На этом этапе происходит процесс создания процедуры,  к последующим этапам не переходит

-- Второй этап процедуры 
 EXEC xp_cmdshell '2'


Вопрос наверное банальный, но не сталкивался как-то раньше с этим и найти в инете не удалось

Violation of PRIMARY KEY constraint 'PkClaimSequenceHeads'. Cannot insert duplicate key in

$
0
0
Подскажите пожалуйста, у меня ключ E1.Sequence должен быть уникальным но он не автоинкремент и E1.Sequence + 1 уже пробовал не помогло :), подскажите как сделать так что бы у меня записи добавлялись к примеру:

1
2
3
4
5

Если я сделаю поле авто инкремент, это мне поможет? Но может есть другие варианты?


	
INSERT INTO ClaimSequenceHeads
SELECT DISTINCT E1.Sequence, 0, E1.WpID, NULL, 0, 1, GETDATE() 
FROM ClaimSequenceHeads E1	
WHERE E1.TypeID NOT in (SELECT E2.TypeID from ClaimSequenceHeads E2 WHERE E2.TypeID = 0 AND E2.WpID = E1.WpID)

Возможно dставить кусок из одного xml в другой?

$
0
0
Есть одна переменная типа xml. Возможно ли взять из этого xml кусок (несколько тэгов) и вставить в другую переменную xml ?

Отключить триггер в базе другого сервера

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

Хочу отключить триггер в таблице базы другого сервера. Сервер прилинковал. MS SQL 2008.

Выполняю:
DISABLE TRIGGER [dbo].[tr_test_I] ON tServ.[tBase].[dbo].[tTable];

Выдает ошибку:
Число префиксов в имени объект "tServ.[tBase].[dbo].[tTable]" превышает максимально допустимое значение. Максимальное значение равно 2.


Но, при этом, если выполнить вставку записей в эту же базу:
INSERT INTO tServ.[tBase].[dbo].[tTable] ... 

то все нормально работает - записи вставляются.
В чем может быть проблема?
Viewing all 7251 articles
Browse latest View live