Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: запросы в xls  [new]
Laroux
Member

Откуда:
Сообщений: 57
Не выдержал... почитал http://msdn.microsoft.com/ru-ru/library/ms186819.aspx

Не все прямо вот встало на свои места, но смысл уловил.

Еще раз сенкс
3 апр 13, 09:10    [14129252]     Ответить | Цитировать Сообщить модератору
 Re: запросы в xls  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Laroux
описать конструкцию

Описываю.
DATEADD(MONTH, DATEDIFF(MONTH, '20000101', GETDATE()), '20000101')

Выделим сначала среднюю часть:
DATEDIFF(MONTH, '20000101', GETDATE())

Смотрим в документацию по DATEDIFF: http://msdn.microsoft.com/ru-ru/library/ms189794.aspx
DATEDIFF
Возвращает количество пересеченных границ (целое число со знаком), указанных аргументом datepart, за период времени, указанный аргументами startdate и enddate.

То есть, в данном случае, это количество первых чисел месяца, расположенных на интервале времени от 01.01.2000 (дата выбрана в общем-то произвольно) до текущей даты. Причём интервал полуоткрытый — startdate в него входит, а enddate — не входит.

В функции DATEDIFF кроется тонкость, не всегда очевидная начинающим. Например, такой запрос:
SELECT DATEDIFF(MONTH, CONVERT(DATETIME, '31.03.2013 23:59:59', 104), CONVERT(DATETIME, '01.04.2013', 104))
возвращает 1, хотя сравниваемые даты отличаются всего на одну секунду.

А такой запрос:
SELECT DATEDIFF(MONTH, CONVERT(DATETIME, '01.04.2013', 104), CONVERT(DATETIME, '30.04.2013 23:59:59', 104))
возвращает 0, хотя сравниваемые даты отличаются почти на 1 месяц.

То есть, если вы хотите получить количество месяцев, прошедших с @date1 до @date2, то простое "DATEDIFF(MONTH, @date1, @date2)" вряд ли подойдёт.

Дальше, подставим полученное число в основное выражение:
DATEADD(MONTH, <кол-во первых чисел месяца от 01.01.2000 до текущей даты>, '20000101')
Тут уже нетрудно понять, что в итоге получается первое число текущего месяца.

Ну и можете выполнить такое нехитрое упражнение: составить выражение, возвращающее для произвольной даты — "последнее число предыдущего месяца 23:59:59". То есть для января — 31.12.2012 23:59:59, для марта — 28.02.2013 23:59:59 и т.д.
3 апр 13, 09:37    [14129341]     Ответить | Цитировать Сообщить модератору
 Re: запросы в xls  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Laroux,

Кстати, такое сравнение, как у вас:
BETWEEN CONVERT(smalldatetime, '01.03.2013 00:00:00', 103)
AND CONVERT(smalldatetime, '31.03.2013 23:59:59', 103))
стараются не делать.
Во-первых, у вас ошибка в использовании типа smalldatetime — этот тип хранит время с точностью до минуты. Выполните запрос:
SELECT CONVERT(smalldatetime, '31.03.2013 23:59:59', 103))
и увидите, что значение округлилось до 01.04.2013 00:00:00.
Во-вторых, даже если использовать тип данных datetime (который хранит время с точостью до 3 миллисекунд), есть микроскопический шанс, что в БД будут данные с датой, например, '31.03.2013 23:59:59.563'. Поэтому надёжнее делать проверку
Дата >= CONVERT(datetime, '01.03.2013 00:00:00', 103)
   AND Дата < CONVERT(datetime, '01.04.2013 00:00:00', 103)
3 апр 13, 09:44    [14129377]     Ответить | Цитировать Сообщить модератору
 Re: запросы в xls  [new]
Laroux
Member

Откуда:
Сообщений: 57
У меня остался всего один вопрос: Гость333, куда Вам слать пиво? :)
3 апр 13, 09:59    [14129448]     Ответить | Цитировать Сообщить модератору
 Re: запросы в xls  [new]
Laroux
Member

Откуда:
Сообщений: 57
Вы не поверите...
"Создание новых представлений (View) является нарушением безопасности так как предоставляет недокументированный механизм потенциальной модификации базовых таблиц."

эпик фейл...
3 апр 13, 11:04    [14129831]     Ответить | Цитировать Сообщить модератору
 Re: запросы в xls  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Laroux
"Создание новых представлений (View) является нарушением безопасности так как предоставляет недокументированный механизм потенциальной модификации базовых таблиц."

Чо это за бред?
3 апр 13, 11:08    [14129863]     Ответить | Цитировать Сообщить модератору
 Re: запросы в xls  [new]
Glory
Member

Откуда:
Сообщений: 104751
Laroux
Вы не поверите...
"Создание новых представлений (View) является нарушением безопасности так как предоставляет недокументированный механизм потенциальной модификации базовых таблиц."

эпик фейл...

Это ответ разработчика вашей базы ?
3 апр 13, 11:11    [14129892]     Ответить | Цитировать Сообщить модератору
 Re: запросы в xls  [new]
Laroux
Member

Откуда:
Сообщений: 57
Glory, Гость333: ПО просто ну уж совсем специфическое и сертифицированное нашими силовыми структурами. Поэтому так
3 апр 13, 11:14    [14129909]     Ответить | Цитировать Сообщить модератору
 Re: запросы в xls  [new]
Laroux
Member

Откуда:
Сообщений: 57
Ладно.. займемся оптимизацией запроса.

А подскажите, есть ли возможность в bcp задать используемую БД? А то если в запросе не использовать конструкции типа bdname_sro_qra_db.dbo.UserCertificate1.CertificateID, то bcp лезет в другую БД и запрос, соответственно, не выполняется. А так бы сэкономил кучу символов
3 апр 13, 11:16    [14129931]     Ответить | Цитировать Сообщить модератору
 Re: запросы в xls  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Laroux,

[-d database_name]
3 апр 13, 11:18    [14129941]     Ответить | Цитировать Сообщить модератору
 Re: запросы в xls  [new]
Laroux
Member

Откуда:
Сообщений: 57
Maxx, этого параметра в SQL 2005 еще нет
3 апр 13, 11:21    [14129954]     Ответить | Цитировать Сообщить модератору
 Re: запросы в xls  [new]
Glory
Member

Откуда:
Сообщений: 104751
Laroux
Ладно.. займемся оптимизацией запроса.

Узнайте, что такое файл DQY для Excel.
Создайте такой файл для вашего запроса.
В шедулере просто открываейте этот файл в Excel и сохраняйте полученный результат как обычный xls
3 апр 13, 11:29    [14129989]     Ответить | Цитировать Сообщить модератору
 Re: запросы в xls  [new]
Laroux
Member

Откуда:
Сообщений: 57
Glory, это получается мне надо на серваке поставить пакет MS Office?
3 апр 13, 11:58    [14130166]     Ответить | Цитировать Сообщить модератору
 Re: запросы в xls  [new]
Glory
Member

Откуда:
Сообщений: 104751
Laroux
это получается мне надо на серваке поставить пакет MS Office?

Там, где будет создаваться файл.
3 апр 13, 11:59    [14130176]     Ответить | Цитировать Сообщить модератору
 Re: запросы в xls  [new]
Laroux
Member

Откуда:
Сообщений: 57
Glory, я заранее извиняюсь, но я уже выше описывал: у меня в распоряжении только стандартный функционал Windows и MS SQL 2005 Express. Management Studio и то с натяжкой (как бы нежелательно ставить), но тоже есть.

И я с этого сервака могу только на другой серв (на котором уже все что угодно можно) только выкладывать файлы. Не больше
3 апр 13, 12:10    [14130256]     Ответить | Цитировать Сообщить модератору
 Re: запросы в xls  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Laroux,

Glory говорит о другом,создаете файл екселя с коннекшином к БД,засовываете туда свой запрос и отдаете пользователям..они с ним и работают,не более .У вас ексель будет выступать как клиент к БД
На самом суревер ексель еснно не нужен
3 апр 13, 12:12    [14130278]     Ответить | Цитировать Сообщить модератору
 Re: запросы в xls  [new]
Laroux
Member

Откуда:
Сообщений: 57
Maxx, порты закрыты. В т.ч. 1433
3 апр 13, 12:33    [14130451]     Ответить | Цитировать Сообщить модератору
 Re: запросы в xls  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
может стоить попробовать тогда через sqlcmd решать проблемму ,он умеет принимать входной файл,как условия для выполнения запросов ?
3 апр 13, 12:39    [14130502]     Ответить | Цитировать Сообщить модератору
 Re: запросы в xls  [new]
Laroux
Member

Откуда:
Сообщений: 57
Maxx, я пробовал помнится. У sqlcmd проблемы с форматированием результатов запроса... Выводится не пойми что))) Точнее в дальнейшем неудобно с этим работать.
bcp мне в этом плане прям очень понравился
3 апр 13, 12:42    [14130520]     Ответить | Цитировать Сообщить модератору
 Re: запросы в xls  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Laroux,

А ваш респондент позволит вам создать в БД пользовательскую функцию или процедуру?
3 апр 13, 12:44    [14130548]     Ответить | Цитировать Сообщить модератору
 Re: запросы в xls  [new]
Laroux
Member

Откуда:
Сообщений: 57
Гость333, как оказалось - нет
3 апр 13, 12:45    [14130557]     Ответить | Цитировать Сообщить модератору
 Re: запросы в xls  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Laroux,

А функцию не дают сделать по какой причине? Она уж точно не предоставляет никакой "механизм потенциальной модификации базовых таблиц".
3 апр 13, 12:48    [14130598]     Ответить | Цитировать Сообщить модератору
 Re: запросы в xls  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Делаем файло :)
типа
exec xp_cmdschell 'bcp.......'

скармливаем етот файл sqlcmd
?
3 апр 13, 12:48    [14130599]     Ответить | Цитировать Сообщить модератору
 Re: запросы в xls  [new]
Glory
Member

Откуда:
Сообщений: 104751
Гость333
А ваш респондент позволит вам создать в БД пользовательскую функцию или процедуру?

View можно создать и в другой базе
3 апр 13, 13:09    [14130774]     Ответить | Цитировать Сообщить модератору
 Re: запросы в xls  [new]
loginb
Member

Откуда:
Сообщений: 1
Laroux,
Если экономить буковки:
1. в начале скрипта можно вставить use [имя базы]; и тогда можно не указывать ни имя базы, ни префикс dbo.
2. Затем добавить Set DATEFORMAT YMD и включить конвертацию даты по умолчанию
3. В запросах использовать alias

Тогда скрипт получится вместо 1044 знаков 439

use opirito_sro_qra_db;
set dateformat ymd;
SELECT 
c1.CertificateID, 
c1.UserID, 
c1.StateID, 
c1.DisplayName, 
c1.SerialNumber,
CONVERT(smalldatetime, c1.IssueDate, 103),
c3.Subject,
c4.EKU
FROM UserCertificate1 c1
INNER JOIN UserCertificate3 c1
ON c1.CertificateID = c3.CertificateID
INNER JOIN UserCertificate4 c4
ON c1.CertificateID = c4.CertificateID
WHERE c4.EKU LIKE '%1.2.643.2.2.34.6%'
AND c1.IssueDate >= '20130301' AND c1.IssueDate <'20130401';


На 2012 проверил - работает... 2005 нету...

Но это, как мне кажется, тупиковый путь...
3 апр 13, 13:22    [14130869]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить