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

Запись спецсимволов в таблицу

$
0
0
У таблицы поле (varchar). В него могут записываться строка со спецсимволами (½, обозначение диаметра и т.п.)
Пробовала N подставлять спереди - выдает ? вместо нужного результата. С диаметром О подставляет.
Если использовать NChar() - то ?, то S. Тестила на дроби.
Какие еще варианты записи существуют?

Nvarchar(max)

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

Есть работающий SQL-запрос. Нужно сделать динамическим, чтобы менять периоды MDX-запроса внутри SQL-запроса.
+SQL-запрос
USE [SM]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[StandardMatrixNoveltiesONESFO3] (@DT date) AS

DECLARE @MDXQUERY nvarchar(4000);
DECLARE @SQLQUERY nvarchar(max);

SET @MDXQUERY =
		N'''SELECT
			{[Measures].[Отгрузки шт]} ON 0,
			... FROM PROFIT)''';

SET @SQLQUERY = N'...	
	FROM OPENROWSET(
		''MSOLAP'',
		''Provider=MSOLAP.3;...'',
		' + @MDXQUERY + '
				...'

EXEC (@SQLQUERY);
Все равно срезается до 4000 символов. Как можно передать в EXEC переменную, содержащий текст длиной свыше 4000 символов, и не использовать такой вариант EXEC (@SQLQUERY1 + @SQLQUERY2 + @SQLQUERY3), который cоединяет разделенные тексты запроса?

медиана за место avg()

$
0
0
Помогите, плиз поправить запрос
;with cte as (
Select *,datePart(WEEKDAY,Dt) as WeekDay,
PERCENTILE_CONT(0.75) WITHIN GROUP (ORDER BY SaleCount) Over (partition by CustomerType,[CustomerName],ItemRelation, DocumentNum, DocumentYear) as PERCENTILE,
avg(SaleCount) over (Partition by CustomerType, [CustomerName], ItemRelation, DocumentNum, DocumentYear,datePart(WEEKDAY,Dt), IsPromo) as AVG_WeekDay
From promo_data_copy)
Update a
Set SaleCount = cte.AVG_WeekDay
From CTE
join promo_data_copy a
on a.Dt = cte.dt
and a.ItemRelation=cte.ItemRelation
and a.CustomerName=cte.CustomerName
and a.DocumentNum = cte.DocumentNum
and a.DocumentYear = cte.DocumentYear
and a.CustomerType = cte.CustomerType
and a.ispromo = cte.ispromo
Where CTE.PERCENTILE < CTE.SaleCount
and datePart(WEEKDAY,CTE.Dt) < 7
and CTE.ispromo = 0 ;

как вместо avg() сделать median()
там такой функции нет
запрос сейчас выбросы заменяет средними значениями по тому или иному дню, но лучше это делать по медиане
но как в экселе там нет такой функции.

Какие сеансы ссылаются на глобальную временную таблицу

$
0
0
Здравствуйте! Подскажите пожалуйста, как можно узнать какие сеансы ссылаются на глобальную временную таблицу (##Tmp)
Дело в том, что есть один сеанс, который создает эту таблицу и держит ее, нужно в определенный момент узнать, есть ли сеансы, помимо того, что создал эту таблицу и если такого сеанса (второго, дополнительного) нет, то нужно эту таблицу удалить

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (X64)   Apr 22 2011 19:23:43   Copyright (c) Microsoft Corporation  Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (Hypervisor) 

Сложный запрос

$
0
0
Доброго дня!
Условие - в таблица содержит записи графика работы сотрудников по принципу
name          smena      1    2   3   4   5   6
Иванов        день       5    5   В   5   5   5
Иванов        ночь       2    2   В   2   2   2


нужно запросом получить данные по Иванову за день и за ночь -

Name   1d 1n 2d 2n 3d 3n
Иванов 5  2   5  2  В  В




Подскажите правильное направление

Запрет на увеличение размера файлов

$
0
0
Добрый день!
Столкнулся с проблемой, логин который имеет owner права на базу, увеличил размер файлов базы и лога. Быстрый поиск в интернете не дал результата, подскажите как можно поставить запрет на расширение в таком случае? На диске крутится несколько баз, это может положить инстанс.

Код не заменяет медиану по выбросам

$
0
0
все подпилиываю этот код

;with cte as (
Select *,datePart(WEEKDAY,Dt) as WeekDay,
PERCENTILE_cont(0.75) WITHIN GROUP (ORDER BY SaleCount) Over (partition by CustomerType,[CustomerName],ItemRelation, DocumentNum, DocumentYear) as PERCENTILE,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY SaleCount) over (Partition by CustomerType, [CustomerName],
ItemRelation, DocumentNum, DocumentYear,
datePart(WEEKDAY,Dt), IsPromo) as median
From promo_data_copy2)
Update a
Set SaleCount = cte.median
From CTE
join promo_data_copy2 a
on a.Dt = cte.dt
and a.ItemRelation=cte.ItemRelation
and a.CustomerName=cte.CustomerName
and a.DocumentNum = cte.DocumentNum
and a.DocumentYear = cte.DocumentYear
and a.CustomerType = cte.CustomerType
and a.ispromo = cte.ispromo
Where CTE.PERCENTILE < CTE.SaleCount
and datePart(WEEKDAY,CTE.Dt) < 7
and CTE.ispromo = 0 ;

его шаги
* есть переменная ispromo, она принимает или 1 или 0
код должен работать с нулевой категорией

1. высчитать 75 процентиль по всем наблюдениям нулевой категории ispromo по переменной SaleCount
2. все что выше 75 процентиля код должен заменять медианой выбросы тех дней, на который он пришолся

например выброс пришелся на четверг
значит смотрим медиану всех четвергов и заменяем ею выбросный четверг
3. и все это код делает для групп сustomerType+[CustomerName]+
ItemRelation+DocumentNum+DocumentYear
т.е. раздельно для каждой такой группы


но сейчас он что-то не отрабатывает
вот набор данных

желтые исходные данные

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

Ошибка после переноса экземпляра

$
0
0
Вообщем так нужно было увеличить диск где установлен экземпляр и база данных
Принято решение подключить диск в SAN к серверу .... остановил все службы базы и скопировал всю папку на новый диск...
Изменил букву диска на то что была, запустил экземпляр и службы

И в журнале windows появилась ошибка
Errors in the metadata manager. An error occurred when instantiating a metadata object from the file, '\\?\G:\Program Files\Microsoft SQL Server\MSAS11.TEST\OLAP\Data\DWASDataBase.0.db\DateDim.972.dim.xml'.

Загрузка файлов статистики в таблицу.

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

Посоветуйте с архитектурой решения.

Есть статистика с сайта, которая несколько раз в день (~ каждые 2-3 часа) выгружается в папку в виде flat файлов с именами вила datafile_YYYYMMDD_HHMM.
Есть задача написать джоб, который будет проверять наличие нового файла в папке и когда появляется новый файл, загружать этот файл в базу.

Как лучше всего реализовать подобное?

Спасибо.

SSIS добавить существующий пакет кодировки

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

В тестовом решении создаю новый пакет Package.dtsx. После всех отладок хочу перенести готовый пакет Package.dtsx в боевое решение. Для этого открываю боевое решение, ПКМ по "Пакеты служб SSIS", "Добавить существующий пакет". Размещение пакета: File System; Указываю путь к готовому пакету Package.dtsx в тестовом решении.

После добавления весь русский текст превращается в иероглифы, например:
"Диспетчер соединений Excel" -> "Диспетчер соединений Excel".

Подскажите, пожалуйста, как решить данную проблему.

Аудит+оповещение изменения размеров базы и лог файла

$
0
0
Здравствуйте друзья!
Кто-нибудь сталкивался с тем как сделать аудит+оповещение в случае изменения maxsize файлов БД. Решение с блокировкой по триггеру на данную операцию не совсем подходит, нужно только уведомление

Частичное восстановление данных, как сделать?

$
0
0
День добрый!
Есть не мало баз размером порядка 100-300Гб, часто программерам необходимо "поковыряться" в данных. Делать это напрямую у клиента как-то не очень... Тащить полный бекап, ресторить и т.п. тоже не совсем логично.
В существующих базах большую часть объема занимают таблицы логов и еще всякие "бесполезные" данные. Поэтому возник вопрос сделать процесс, который может скопировать выбранные программером таблицы, чтоб их можно было легко перенести на тестовый сервер и восстановить на нем данные?
Может есть какой-то готовый функционал или инструменты, которые могут справиться с задачей кроме как select * into... from ...?

Речь идет о sql 2016 standard edition.

Все данные находятся на одном партишине.

Спасибо!

Проблема с выводом

$
0
0
Добрый день. Прошу проконсультировать. Связал три таблицы, работает, но при добавлении условия 'Определение недостающей информации' ничего не выводит, и без ошибок. С чем это может быть связано?

 
select
c.Number
from
[Case] c 
left join Activity act on (c.ParentActivityId = act.Id)
left join ActivityCategory actc on (act.ActivityCategoryId = actc.Id)
where actc.Name = 'Определение недостающей информации'

Повышение производительности SQL Express

$
0
0
Есть работающее сторонее приложение, которое нельзя ни переписать, ни заменить.
Есть среднедесктопный компьютер с процессором Intel и 32ГБ памяти. Есть SQL Express 2014.

Что можно сделать для увеличения производительности без покупки лицензии на Standard?

Пока придумалось только:
  • поставить виндовс и SQL 32 bit. Express 2014 всё ещё поддерживает. Всё равно больше 1ГБ SQL не возьмёт;
  • отключить hyperthreading. Всё равно больше 4 потоков SQL не возьмёт;
  • поставить ramdrive в память выше 4ГБ (PAE/AWE) и положить на него файлы tempdb по числу ядер, не потоков.
  • В системе запущена трассировка. Как определить что запустило эту трассировку и как останов


    Как одним запросом сделать такую выборку

    $
    0
    0
    День добрый, мой сниппет здесь
    create table t1(id int, name varchar(10), ssn int)
    create table t1_exclusive(id int)
    insert into t1(id,name,ssn) values 
     (1,'A',111)
    ,(2,'B',222)
    ,(3,'C',111)
    ,(4,'D',333)
    ,(5,'E',444)
    ,(6,'F',555)
    ,(7,'G',222)
    ,(8,'H',777)
    ,(9,'I',888)
    ,(10,'J',999)
    
    insert into t1_exclusive(id) values(2)
    


    Теперь select с where t1.ssn=222 должен вернуть:

    id name ssn
    2 B 222

    с where t1.ssn=111 должен вернуть:

    id name ssn
    1 А 111
    3 С 111

    А без фильтрации по ssn должен вернуть все записи из t1. Как такое сделать одним запросом (можно с подзапросами)?

    разделение данных по критерию

    $
    0
    0
    Подскажите, как мне разделить данные по критерию?

    /****** Скрипт для команды SelectTopNRows из среды SSMS  ******/
    SELECT  [Dt]
          ,[CustomerName]
    
          ,[ItemRelation]
    
          ,[SaleCount]
          ,[DocumentNum]
          ,[DocumentYear]
          ,[IsPromo]
          ,[CustomerType]
      FROM [Action].[dbo].[FC]
    


    [IsPromo] имеет значения 0 и 1.
    Мне нужно разделить данные по количеству продаж по [SaleCount] для нулевой категории ispromo!

    например, по ispromo=0, 20 наблюдений, из них по [SaleCount] только 15 не нулевые, а 5 нулевых, не интересных.
    Рассчитаем коэффициент, делим общее число дней, на количество дней, где были не нулевые продажи.
    15/20=0,75.
    Запрос должен делаться для страт(групп) [CustomerName]+[ItemRelation]+[DocumentYear]
    Так вот, если внутри той или иной страты такой коэффициент больше 0,71, то такие страты записать в таблицу
    mytab1
    если меньше, то в mytab2

    Как это сделать?

    скопировать базу не работает

    $
    0
    0
    сделал мастером (ПКМ по БД, задачи->скопировать базу данных) пакет DTS на копирование БД сервер источник=сервер цель, база каждый раз должна перезаписываться.
    общая цель каждодневная копия за предыдущий день. но не работает почему то. база не создается см. скрин. подскажите куда копнуть.

    Как заставить SQL Server ничего не делать, если переменная NULL

    $
    0
    0
    Доброе утро.

    Вот такой запрос:
    declare @var int = null
    
    update Detail
    set Designation = 'xxx'
    where ID = @var
    


    Можно ли заставить SQL Server ничего не делать (не сканировать таблицу или искать индексы), если переменная @var является NULL. Поле ID кластеризованный индекс не допускающий NULL

    Знаю что можно так сделать, если поставить внешнее условие IF. Но можно ли в самом запросе такое провернуть? Спрашиваю из любопытства.

    Т.е. условно говоря, сервер посмотрел на значение переменной, затем на тип столбца в искомом поле, узнал что поле не допускает NULL и пропускал запрос

    нужен sql 2008 r2 (срочно)

    $
    0
    0
    доброй ночи

    помогите найти дистриб sql 2008 R2 (x86)
    нужна именно эта версия,
    везде перерыл
    Viewing all 7251 articles
    Browse latest View live