Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Nevillested Member Откуда: Москва Сообщений: 31 |
Добрый вечер, товарищи. Оговорюсь сразу, сделал уже 2 похожих батника, примерно понимаю что есть что. С третьим батником-беда. Бьюсь как об стенку горох. К сути, есть батник, он должен сделать селект и выгрузить всё в файл. (на самом деле он еще много что должен сделать, как и предыдущие два, но на третьем я встал в самом начале.) sqlcmd -S адрес_сервера -d моя_БД -E -s',' -W -Q "declare @a DATE set @a=cast(getdate() as date); select top (1) (подзапрос 1) as pod1, ((подзапрос 2)-(подзапрос 1)) as dif_pod, (подзапрос_2) as pod2, statistiks from table"> file.txt Нет, у меня весь код находится в одной сплошной строке, без перехода на новую строку, тут я написал так-для читабельности и наглядности. Проблема-батник отрабатывает, все ок, но результат у меня получается в виде pod1'dif_pod'pod2'statistiks ---------'------------------'---------'------------- NULL'NULL'NULL'NICE! (1 rows affected) Если я этот же запрос выполню на клиенте mssql-все окей, даёт нормальные данные, а не NULL. NULL'ы эти-данные типа datetime. При чем, сделал уже 2 максимально похожих батника, но по другой таблице этой же БД, и другой таблице другой БД-все супер, а здесь почему-то НУЛЫ. Это может помочь в решении-если из подзапросов1/2 убрать WHERE, не дает нулы, но дело в том, что where мне там нужно) Есть мысли? Заранее благодарен _____ версия 2014 standart Сообщение было отредактировано: 10 фев 21, 16:48 |
10 фев 21, 16:52 [22278994] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
"Это может помочь в решении-если из подзапросов1/2 убрать WHERE, не дает нулы, но дело в том, что where мне там нужно) Есть мысли?" А где же там вхере? |
10 фев 21, 17:04 [22279005] Ответить | Цитировать Сообщить модератору |
env Member Откуда: Россия, Москва Сообщений: 7435 |
Nevillested, От collation, до ansi nulls - показывайте подробнее |
10 фев 21, 17:19 [22279014] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8314 |
Nevillested, напишите set ansi_nulls on; declare @a ... и попробуйте set ansi_nulls off; declare @a ... Сообщение было отредактировано: 10 фев 21, 17:42 |
10 фев 21, 17:48 [22279030] Ответить | Цитировать Сообщить модератору |
Nevillested Member Откуда: Москва Сообщений: 31 |
Что показывать? Не совсем Вас понял
не сработало
Я его уместил в "подзапрос". Ниже все так как есть, только там еще идет union all, но я его убрал, как и второй запрос, который шел под унионом. (все равно даёт нулы, даже без "унион+второй запрос") declare @a DATE set @a=cast(getdate() as date); SELECT top (1) (select min(time_run) FROM [table] where cast(time_run as date)=@a) as min_run, (convert(varchar,(cast(((select max(time_end) FROM [table] where cast(time_run as date)=@a) - (select min(time_run) FROM [table] where cast(time_run as date)=@a)) as time)), 20)) as work, (select max(time_end) FROM [table] where cast(time_run as date)=@a) as max_run, statik FROM [table] Результат: min_run'work'max_run'statik ---------'------------------'---------'---------- NULL'NULL'NULL'NICE! (1 rows affected) Сообщение было отредактировано: 11 фев 21, 10:06 |
||||||||||||
11 фев 21, 10:09 [22279319] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
Nevillested, А time_run какого типа? varchar(n)? |
11 фев 21, 10:25 [22279334] Ответить | Цитировать Сообщить модератору |
Nevillested Member Откуда: Москва Сообщений: 31 |
invm, datetime все, кроме statik |
11 фев 21, 11:05 [22279366] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
|
||||
11 фев 21, 11:17 [22279377] Ответить | Цитировать Сообщить модератору |
env Member Откуда: Россия, Москва Сообщений: 7435 |
Полный запрос. И уточнить типы данных по каждому полю, к которому применяются фильтры или по которому возможна сортировка результата. Код в 22279319 соответствует действительности или есть какие-то опущенные фильтры? |
||||
11 фев 21, 11:17 [22279378] Ответить | Цитировать Сообщить модератору |
Nevillested Member Откуда: Москва Сообщений: 31 |
Проверил БД, проверил сервер, всё то, что надо, даже коллегу попросил посмотреть, не долблюсь ли я в глаза. Кажется, оба долбимся.
Вот прямо-таки полный со всеми фильтрами declare @a DATE set @a=cast(getdate() as date); SELECT top (1) (select min(time_run) FROM [table] where cast(time_run as date)=@a and name like '%olga%' and name not like '%ivanova%') as min_run, (convert(varchar,(cast(((select max(time_end) FROM [table] where cast(time_run as date)=@a and name like '%olga%' and name not like '%ivanova%') - (select min(time_run) FROM [table] where cast(time_run as date)=@a and name like '%olga%' and name not like '%ivanova%')) as time)), 20)) as work, (select max(time_end) FROM [table] where cast(time_run as date)=@a and name like '%olga%' and name not like '%ivanova%') as max_run, statik FROM [table] name-nvarchar time_run-datetime time_end-datetime |
||||||||||||||||
11 фев 21, 11:37 [22279392] Ответить | Цитировать Сообщить модератору |
env Member Откуда: Россия, Москва Сообщений: 7435 |
упд. Возможно ещё явно стоит указать, COLLATE для литералов, чтобы был явный _CI Сообщение было отредактировано: 11 фев 21, 11:34 |
||||
11 фев 21, 11:38 [22279393] Ответить | Цитировать Сообщить модератору |
Nevillested Member Откуда: Москва Сообщений: 31 |
что за N? В моем коде такого нет Не совсем Вас понял, что значит указать COLLATE для литералов, чтобы был явный _CI? |
||||||||
11 фев 21, 11:49 [22279409] Ответить | Цитировать Сообщить модератору |
env Member Откуда: Россия, Москва Сообщений: 7435 |
Добавьте и запустите. |
||||
11 фев 21, 11:55 [22279414] Ответить | Цитировать Сообщить модератору |
env Member Откуда: Россия, Москва Сообщений: 7435 |
Ровно то, что написано - добавить после литерала инструкцию COLLATE с совпадающими для ваших nvarchar полей значениями кодовой страницы и параметров сортировки и явным указанием Case Insensitive, если нет уверенности, что значения в таблице также как и в литерале строго в нижнем регистре. |
||||
11 фев 21, 11:58 [22279419] Ответить | Цитировать Сообщить модератору |
Nevillested Member Откуда: Москва Сообщений: 31 |
Не сработало
Не понимаю того, что Вы говорите, просто потому что не знаю, что вообще это такое. Сейчас погуглю, разберусь и дам знать о результатах позже |
||||||||||||||||
11 фев 21, 12:13 [22279426] Ответить | Цитировать Сообщить модератору |
env Member Откуда: Россия, Москва Сообщений: 7435 |
Nevillested,create table #tmp (s nvarchar(10) collate cyrillic_general_cs_as); insert into #tmp(s) values (N'Abc'), (N'abc'); select * from #tmp where s like N'%ab%'; S --- abc select * from #tmp where s like N'%ab%' collate cyrillic_general_ci_as; S --- Abc abc |
11 фев 21, 12:28 [22279439] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
Nevillested, Клиент и sqlcmd работают под одним и тем же логином? |
11 фев 21, 12:29 [22279441] Ответить | Цитировать Сообщить модератору |
Nevillested Member Откуда: Москва Сообщений: 31 |
invm, да, под одним и тем же логином |
||||
11 фев 21, 14:57 [22279522] Ответить | Цитировать Сообщить модератору |
Ennor Tiegael Member Откуда: Сообщений: 3348 |
|
||||||||
11 фев 21, 15:45 [22279554] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9633 |
Добавьте к вызову sqlcmd ключ -I А вообще, лучше профайлером сравнить опции соединения в обоих случаях. |
||||||||
11 фев 21, 15:47 [22279557] Ответить | Цитировать Сообщить модератору |
Ennor Tiegael Member Откуда: Сообщений: 3348 |
Nevillested, И, кстати, какой-то у вас разделитель столбцов странный... вы уверены, что sqlcmd правильно интерпретирует вашу закавыченную запятую? В двойные кавычки брать ее не пробовали? |
11 фев 21, 15:49 [22279558] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
к счастью, нет прав на создание таблиц, только на select ![]() |
||||||||
11 фев 21, 16:03 [22279570] Ответить | Цитировать Сообщить модератору |
Nevillested Member Откуда: Москва Сообщений: 31 |
Да, по неопытности своей, у меня на create-сразу сработал триггер) На код... create table #tmp (s nvarchar(10) collate cyrillic_general_cs_as); insert into #tmp(s) values (N'Abc'), (N'abc'); select * from #tmp where s like N'%ab%'; select * from #tmp where s like N'%ab%' collate cyrillic_general_ci_as; Такой результат: (2 rows affected) s - (0 rows affected) s - (0 rows affected)
Пробовал, все равно нулы.
Ох, ну тут что правда то правда, тут Вы в яблочко попали) Сообщение было отредактировано: 11 фев 21, 16:09 |
||||||||||||||||||||
11 фев 21, 16:15 [22279583] Ответить | Цитировать Сообщить модератору |
env Member Откуда: Россия, Москва Сообщений: 7435 |
Nevillested, А в ssms что возвращает тот же код? И покажите, что возвращает select serverproperty('Collation') as server_collation; select databasepropertyex(db_name(), 'Collation') as db_collation; select db_name() as db_name; |
11 фев 21, 17:27 [22279620] Ответить | Цитировать Сообщить модератору |
Nevillested Member Откуда: Москва Сообщений: 31 |
![]() Прошу прощения, название бд-гос.тайна) (теперь вы понимаете да, это всё объясняет:D) Сообщение было отредактировано: 11 фев 21, 17:43 |
||||
11 фев 21, 17:49 [22279636] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |