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

Установщик программы для MS SQL Server

$
0
0
Есть программа на C#, работает с SQL Server 2012 Express.
Надо сделать установщик (setup) программы, чтобы автоматически устанавливался SQL Server и настраивалось подключение. Чтобы пользователю самому ничего не надо было устанавливать и настраивать.
Какими средствами это можно сделать?
Либо подскажите варианты как можно реализовать подключение к mdf файлу, лежащему в папке программы без установки SQL Server.

аудит SQL servers

$
0
0
Добрый день нужно несколько советов.

Есть парк SQL серверов 5к+ небольших, все они не в домене, на большей части 2008R2 Express и 2014 Express. Хотелось бы автоматизировать этот бардак.
1) Думаю сделать файлик с csv\txt БД на каждом сервере, работать с ним через oprnrowset.
2) Шедулером винды запускать скрипт собирать аудит с баз, с дисков, результаты писать в файловую БД собранную в п.1
3) После создавать файлик с инцидентами, если они есть и выкидывать его на nas или ftp
4) далее его уже их импортировать в БД у себя на компе и наводить порядки :)

Кидайте камнями, с радостью выслушаю другие предложения, мнения.
Так же может есть у кого пример чтения-записи в файл через OPENROWSET.

Update какие записи затронуты

$
0
0
Здравствуйте.
MS SQL SERVER 2017

Table

id name
1 Сергей
2 Иван
3 Сергей
4 Иван
5 Сергей


update Table
set Name = 'Вова'
where name = 'сергей'


Как узнать id затронутых записей?

хочу эти id поместить в таблицу некую. триггер не подходит.

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

select id into #T
from Table
where name = 'сергей'


а потом апдейт ...

При установке MS SQL 2016 ошибка "Отсутствует учетка сисадмина (SQL)"

$
0
0
Здравствуйте. При установке MS SQL 2016 ошибка (вложение):
"Отсутствует учетка сисадмина (SQL)"

Установку ведет учетка доменная админcкая с правами ставить SQL. Куда копать?

ЗЫ. SQL ставится для MS SCCM2016, он требует MS SQL 2016

Неправильный синтаксис около ключевого слова "SET".

$
0
0
делаю запрос
 DECLARE @Start datetime = '20180101'
DECLARE @MonthList varchar(max)

;With Monthdates
AS
(
SELECT @Start AS Dt,FORMAT(@Start,'MMM-yyyy') AS DispDt
UNION ALL
SELECT DATEADD(mm,1,Dt),FORMAT(DATEADD(mm,1,Dt),'MMM-yyyy')
FROM Monthdates
WHERE DATEADD(mm,1,Dt) <= GETDATE()
)



SET @MonthList=STUFF((SELECT ',[' + DispDt + ']' FROM Monthdates ORDER BY Dt FOR XML PATH('')),1,1,'')

DECLARE @SQL varchar(max) ='SELECT shop_code,product_id,'+ @MonthList + '
FROM
(
select f1.shop_code,f1.product_id,coalesce(f2.returned,0) * 100.0/f1.shipped as returnperc,FORMAT(f1.month_date,''MMM-yyyy'') AS MonthDate
from(
select shop_code,product_id,
dateadd(mm,datediff(mm,0,doc_date),0) as monthdate,
sum(ship_count) as shipped
from final4 
group by shop_code,
product_id,
datediff(mm,0,doc_date)
)f1
left join (
select shop_code,product_id,
dateadd(mm,datediff(mm,0,doc_date),0) as monthdate,
sum(return_count) as returned
from final4 
group by shop_code,
product_id,
datediff(mm,0,doc_date)
)f2
on f2.shop_code = f1.shop_code
and f2.product_id = f1.product_id
and f2.monthdate = f1.monthdate
)tPIVOT(MAX(ReturnPerc) FOR MonthDate IN (' + @MonthList + '))p'

EXEC (@SQL)


выходит ошибка
Неправильный синтаксис около ключевого слова "SET".
Как исправить, подскажите, плиз.

Связанный сервер MySQL создаётся без ошибок, но не открывается

$
0
0
Добрый день, уважаемые.
Прошу помочь в доступе к базе mysql (битрикс24) из Ms Sql Management Studio. Что есть:
1. Источник ODBC- системный DSN, пробовал с разными драйверами. Сейчас стоит 5.1:
Картинка с другого сайта.
2. Создал связанный сервер без ошибок:
USE [master]
GO
EXEC master.dbo.sp_addlinkedserver 
@server = N'BX'
,@srvproduct=N'sitemanager'
,@datasrc=N'sitemanager'
,@provider=N'MSDASQL'
,@provstr=N'Driver={MySQL ODBC 5.1 Driver};DATABASE=sitemanager;OPTION=3;PWD=mypass;UID=reader2;SERVER=BX'
GO
EXEC master.dbo.sp_serveroption @server=N'BX', @optname=N'rpc', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'BX', @optname=N'rpc out', @optvalue=N'true'
GO

3. При попытке открыть таблицу в MySQL
SELECT * FROM OPENQUERY(BX, 'SELECT * FROM sitemanager.b_blog;')

получаю:
Поставщик OLE DB "MSDASQL" для связанного сервера "bx" вернул сообщение "[Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию".
Сообщение 7303, уровень 16, состояние 1, процедура sp_testlinkedserver, строка 1
Не удалось проинициализировать объект источника данных поставщика OLE DB "MSDASQL" для связанного сервера "bx".

4. А в Excel нормально данные выгружаются при помощи этого DSN
Что не так? Драйвера пробовал и 5.3, и 8

Как определить максимальный размер будущего полного бэкапа?

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

Для оценки текущего размера всех файлов данных использую запрос:

select SUM(size * 8.0 / 1024) as [Size, Mb]
from sys.master_files
WHERE database_id = DB_ID()
AND type_desc = 'ROWS'
GROUP BY database_id


Вопросы:

1) Верно ли моё предположение, что максимальный размер будущего бэкапа не превысит размером
сумму текущих размеров всех файлов данных?

2) Правильно ли я рассчитываю размер всех файлов данных?

ошибки сбора данных Data Collection

$
0
0
Добрый день форумчане!
есть сервер, MSSQL 2012 (SP3) (KB3072779) - 11.0.6020.0 (X64).
На нем астроен Data Collection, настроен по инструкции с сайта MS.
ситуация следующая.
через некоторое время после активации дата-коллектора - он перестает показывать статистику по запросам (Query Statistics)
если перезапустить сам дата коллектор - все работает, но потом данные проподают. пока не перезапустишь снова...
сам датаколлектор настроен из под админской учетки. и запускается так же из под админской учетки.
в логах collection sets (query) - ошибка Failed to create kernel event for collection set.
права для сбора - админские.
статью смотрел [url=]http://www.sql.ru/blogs/dbasimple/1935[/url] , не помогло решение.
предложение обновить до SP4 - не дает результата.

собстенно вопрос, кто как решал похожу проблему?

Full-Text Search

$
0
0
Здравствуйте.
MS SQL SERVER 2017

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

select *
from dbo.Table
where contains (field, '"обустр*" and "лич*" and "дел*"')


почему без слова "дел" есть результат а с "дел" нет результата ?

PIVOT/UNPIVOT несколько значений из столбца в одну строку

$
0
0
Доброго времени суток! На форумах есть темы с подобным вопросом, где нужно значения из столбца поместить в одну строку в соответствии с каким-то условием. Но мне нужно сделать это через PIVOT/UNPIVOT.

для каждого empid поместить все его company в одну строку

Например:
как есть

А зачем такому плану 50 мгб памятя

$
0
0
Он же строки нигде не копит

Не понятный план запроса

$
0
0
Коллеги, доброе утро. Обратил внимание на один вроде бы рядовой запрос:
SELECT top 200 
        sm.SMS_ID, 
        [recipients] = case 
                         when sm.Use_Recipients_AsIs = 1 then sm.recipients
                         else '7' + sm.recipients
                       end, 
        sm.[message], ss.[Login], ss.[Password], ss.Source, ss.prov_priority, 
        [name] = isNull(ss.Source, ss.Description)
    FROM SMS sm
    JOIN SMS_Sender ss ON sm.Sender_ID = ss.Sender_ID       
    left join sms_blacklist b on sm.recipients = b.phone                       
    WHERE sm.Send = 0    
    and b.phone is null

План запроса во вложении.
Почему суммарная стоимость отдельных блоков больше 100%? Это глюк MS SQL?
Насколько помню, когда раньше такое встречал, достаточно было обновить статистику по таблице и % были корректные.
А тут обновил статистику по всем 3м таблицам, и ничего не поменялось.
В sms_blacklist 1 запись,
В SMS_Sender 11.
Самая большая SMS почти 2млн. записей, индекс по Send с инклюдом всех нужных полей. Запрос в общем-то работает почти мгновенно.
Но заметил, что проце по активным процессам в БД запрос потреблял значительное ЦПУ, хотя не понятно, вроде никаких сложных операций вычисления нет.
Подскажите, может что не так понимаю?
---
Проходя мимо разложенных граблей, ты теряешь драгоценный опыт. (с)

Trigger update/delete/insert mssql

$
0
0
Create a new table Production.ProductsHistory that will be used to store the history of changes in Production.Products. The history table should include the following columns: ID (primary key, identity); Action (varchar, will contain an action type Insert, Update or Delete); ModifiedDate (datetime); productid (the productid value from original Production.Products table); UserName (the name of user who applied changes). Create other columns if you think they are reasonable.
Create a trigger for the INSERT, UPDATE and DELETE operations for the Production.Products table to save history of changes to the Production.ProductsHistory table.
Try to insert, update or delete rows in the Production.Products. Verify the Production.ProductsHistory was populated. Try to affect several records in one operation (for example update 5 records in one UPDATE statement and verify all 5 records were added to the history).

CREATE TABLE TestSQL.Production.ProductsHistory
(
    Id INT IDENTITY PRIMARY KEY,
    ProductId INT NOT NULL,
    [Action]  VARCHAR(6) NOT NULL,
    ModifiedDate DATETIME NOT NULL DEFAULT GETDATE(),
	UserName NCHAR(60) NOT NULL DEFAULT SYSTEM_USER
);


CREATE TRIGGER trg_Products_IUD
ON TestSQL.Production.Products
AFTER INSERT, UPDATE, DELETE
AS BEGIN

DECLARE  @ProductId INT

---- Get data from inserted/ updated
		   SELECT @ProductId=ProductId        
           FROM inserted

 ---- Get data from deleted
              SELECT @ProductId=ProductId
              FROM deleted

  -- Insert Case
   IF EXISTS( SELECT * FROM inserted) AND NOT EXISTS (SELECT * FROM deleted) 
    BEGIN
             INSERT INTO TestSQL.Production.ProductsHistory (ProductId, [Action])
              Values( @ProductId, 'Insert')
    END
    
    -- Update Case
   IF EXISTS( SELECT * FROM inserted) AND EXISTS (SELECT * FROM deleted)
    BEGIN
             INSERT INTO TestSQL.Production.ProductsHistory (ProductId, [Action])
              Values( @ProductId, 'Update')
    END
      
       -- Delete Case
       IF EXISTS( SELECT * FROM deleted) AND NOT EXISTS (SELECT * FROM inserted)
       BEGIN
            
         INSERT INTO TestSQL.Production.ProductsHistory (ProductId, [Action])
              Values( @ProductId, 'Delete')

       END
END



Мой триггер пишет только первую изменяемую/удаляемую/вставляемую строку если это группа строк

INSERT INTO TestSQL.Production.Products (productname, supplierid, categoryid, unitprice, discontinued)
Values('Product AAAAA', 1, 5, 13.0000, 1),
('Product AAAAA', 1, 5, 15.0000, 1),
('Product AAAAA', 1, 5, 14.0000, 1),
('Product AAAAA', 1, 5, 16.0000, 1)


с одиночными работает отлично


подкажите, пожалуйста, как в history писать все изменения?

Как на 2014 восстановить базу с 2017

$
0
0
-- меняем уровень совместимости - 2008
ALTER DATABASE SBER   
SET COMPATIBILITY_LEVEL = 100
GO

-- проверяем
SELECT compatibility_level  
FROM sys.databases WHERE name = 'SBER';  
GO
-- 100


при восстановлении бекапа ошибка

хотя судя по таблице версии совместимы
https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-database-transact-sql-compatibility-level?view=sql-server-2017&viewFallbackFrom=sql-server-2014

в чем может быть ошибка?

Помогите разобраться с заданием по OVER

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

сам текст задания.

Необходимо написать запрос, результатом которого будет таблица с покупками всех клиентов,
отсортированная в обратном хронологическом порядке.
В этой таблице должны отобразиться только те покупки, на которые хватит кредита.
Причем, в последней строке для каждого клиента должна быть указана не сумма покупки, а остаток кредита.
Решение должно быть в рамках одного запроса, без курсоров и временных таблиц.

Вводные:
declare @UserCredit table (
Id int IDENTITY(1,1),
UserId int,
Credit numeric(18,2)
);
 
insert into @UserCredit
values (1, 20), (2, 25);
 
declare @UserPurchase table (
Id int IDENTITY(1,1),
UserId int,
Cost numeric(18,2),
DT date,
Name varchar(50)
);
 
insert into @UserPurchase
values
 (1, 5, '24.04.2016', 'sku1'),
 (1, 6, '19.04.2016', 'sku2'),
 (1, 7, '22.04.2016', 'sku3'),
 (1, 8, '04.04.2016', 'sku4'),
 (1, 4, '18.04.2016', 'sku5'),
 (1, 5, '18.04.2016', 'sku6'),
 (1, 2, '29.04.2016', 'sku7');
 insert into @UserPurchase
values
 (2, 5, '24.04.2016', 'sku1'),
 (2, 6, '19.04.2016', 'sku2'),
 (2, 7, '22.04.2016', 'sku3'),
 (2, 8, '04.04.2016', 'sku4'),
 (2, 4, '18.04.2016', 'sku5'),
 (2, 2, '29.04.2016', 'sku7');
 

Результат запроса:

UserId DT Name Purchase/Rest
1 2016-04-29 sku7 2.00
1 2016-04-24 sku1 5.00
1 2016-04-22 sku3 7.00
1 2016-04-19 sku2 6.00
1 2016-04-18 sku6 0.00
2 2016-04-29 sku7 2.00
2 2016-04-24 sku1 5.00
2 2016-04-22 sku3 7.00
2 2016-04-19 sku2 6.00
2 2016-04-18 sku5 4.00
2 2016-04-04 sku4 1.00

Вот до чего я дошел самостоятельно
select 	c.Userid, p.dt, p.name, p.cost, 
		c.credit-sum(p.cost) OVER (PARTITION by c.userid ORDER by p.dt DESC, p.name DESC) as 'Purchase/Rest'
		
from  @UserCredit as c
INNER JOIN @UserPurchase as p on p.UserId=c.UserId

ORDER by c.Userid, p.dt DESC;

но как мне впихнуть в один столбец и значение цены и результат over в нужной строчке категорически непонятно. Сразу говорю, это мой первый опыт общения с T-SQl. Цель выполнения - исключительно саморазвитие.На данную должность не претендую.

Настоятельно прошу готового решения не писать. просто натолкните на правильный путь.

Заранее благодарю!

загрузка clr

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

Не получается загрузить библиотеку:

CREATE ASSEMBLY [CORE_MalachiteApiHelper] FROM 'C:\MyTest.dll' WITH PERMISSION_SET = EXTERNAL_ACCESS


Пишет след. ошибку: "Сборка "MyTest" ссылается на сборку "system.web, version=2.0.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a.", которая отсутствует в текущей базе данных."

Подскажите, где можно взять некую сборку "system.web, version=2.0.0.0" и будет ли она работать на MSSQL2008R2?
Или же нужно писать библиотеку без зависимости "system.web"?

медленная отдача данных запроса на клиента

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

Проблема следующая: есть некая хранимая процедура время выполнения которой в Management Studio занимает 10-20 секунд (результат ~5000 записей), при вызове этой же хранимки в клиенте(C#) загрузка данных может занять до 5 минут, причём прогресс показывает, что данные грузятся порциями по 50-100 строк(приблизительно). Несущественные(в плане времени выполнения в Management Studio) манипуляции(удаление/создание) с индексами иногда оказывают положительное действие и время загрузки данных на клиенте начинает совпадать со временем выполнения хранимки в Management Studio, но через некоторое время всё снова повторяется.
В таком поведении пока замечена только одна хранимка.

Подскажите, пожалуйста, куда смотреть?

select @@VERSION

Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) Aug 22 2017 17:04:49 Copyright (C) 2017 Microsoft Corporation Express Edition (64-bit) on Windows Server 2016 Standard 10.0 <X64> (Build 14393: ) (Hypervisor)

Скрипт Python не находит файл в сети

$
0
0
Использую скрипт через транзакт, os.path.exists("")

Когда проверяю файл на сервере os.path.exists(R"D:\file1.txt")
но если файл в локальной сети os.path.exists(R"\\localPath\file1.txt")
скрипт выдает что файл не существует.

Если запустить такой же скрипт через IDE то находит оба файла.

Кто подскажет в чем может быть проблема?

Inner join да не простой

$
0
0
Не могу понять, где я ошибся. Помогите, пожалуйста.
Есть задание "Вывести компании где женатых сотрудников с зарплатой больше 1500 меньше, чем не женатых с зарплатой больше 1500".
Дано две таблицы:

Employee
ID Name Salary Age Status
1 Alex 1000 1,5 Married
2 Nik 2500 5 Single
3 Jed 1500 3 Single
4 Tod 700 1 Married
5 Karl 200 0,5 Married
6 Emily 4000 10 Married
7 Den 5000 7 Single
8 Mark 800 2 Single

Company
Id Company_Name Employee_id
1 Google 7
2 Apple 2
2 Apple 4
2 Apple 3
1 Google 5
3 Samsung 6
1 Google 1
3 Samsung 8

Мой код:

use [Тест]
go
SELECT c.Company_Name
from employee e
inner join company c
on e.ID = c.employee_id
Where ((select count(e.Name) from employee e
where e.status = 'Married'
And e.salary > 1500) < (select Count(e.Name) from employee e
where e.status = 'Single'
And e.salary > 1000))
Group by c.Company_name;

В результате запроса - все три компании, что не есть корректно.

Заранее благодарю!

Реструктуризация таблицы

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

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

Например:

БАЗА1, ТАБЛИЦА1: ID, КОЛОНКА1, КОЛОНКА2, КОЛОНКА3...
БАЗА2, ТАБЛИЦА1: КОЛОНКА1, КОЛОНКА2, КОЛОНКА3...

(В БАЗА2\ТАБЛИЦА1 отсутствует колонка уникального идентификатора записи 'ID').

Есть ли какой-нибудь способ - как добавить ID в БАЗА2\ТАБЛИЦА1 так, чтобы порядок колонок сохранился и соответсвовал первой базе и при этом, все данные, хранящиеся в таблице второй базы, там и остались? То есть, чтобы стало:

БАЗА2, ТАБЛИЦА1, ID, КОЛОНКА1, КОЛОНКА2, КОЛОНКА3...

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

Спасибо...
Viewing all 7251 articles
Browse latest View live