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

Откуда: Россия, Москва
Сообщений: 7439
Nevillested,

В ssms
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;


В sqlcmd
select serverproperty('Collation') as server_collation;
select databasepropertyex(db_name(), 'Collation') as db_collation;
select db_name() as db_name;

Мне не важно знать, как база называется. Главное, чтобы совпадало в ssms и sqlcmd.
11 фев 21, 18:00    [22279645]     Ответить | Цитировать Сообщить модератору
 Re: NULL SQLCMD  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 7439
И также в ssms и sqlcmd к скрипту с табличкой #tmp добавьте запрос
select * from #tmp where (s collate cyrillic_general_ci_as) like N'%ab%';

, что он вернёт
12 фев 21, 09:12    [22279866]     Ответить | Цитировать Сообщить модератору
 Re: NULL SQLCMD  [new]
Nevillested
Member

Откуда: Москва
Сообщений: 31
env,

SQLCMD:
server_collation
----------------
Cyrillic_General_CI_AS

(1 rows affected)
db_collation
------------
Cyrillic_General_CI_AS

(1 rows affected)
db_name
-------
ИМЯ_БД

(1 rows affected)
Msg 208, Level 16, State 1, Server АДРЕС_СЕРВЕРА, Line 1
Invalid object name '#tmp'.


MSSMS:

(2 rows affected)
s
----------
abc

(1 row affected)

s
----------
Abc
abc

(2 rows affected)

s
----------
Abc
abc

(2 rows affected)


Плохо понимаю, что происходит и как Вы диагностируете проблему (но не сомневаюсь, что получится)
12 фев 21, 10:42    [22279897]     Ответить | Цитировать Сообщить модератору
 Re: NULL SQLCMD  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 7439
Nevillested
Invalid object name '#tmp'.

Понятно. Надо как с детьми...

Фраза
env
к скрипту с табличкой #tmp добавьте запрос

означает - добавьте в скрипт
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;

запрос
select * from #tmp where (s collate cyrillic_general_ci_as) like N'%ab%';

и выполните скрипт целиком в sqlcmd

Сообщение было отредактировано: 12 фев 21, 11:02
12 фев 21, 11:08    [22279910]     Ответить | Цитировать Сообщить модератору
 Re: NULL SQLCMD  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 7439
Nevillested
db_name
-------
ИМЯ_БД

совпадает с аналогичным вызовом через ssms?
12 фев 21, 11:10    [22279914]     Ответить | Цитировать Сообщить модератору
 Re: NULL SQLCMD  [new]
Nevillested
Member

Откуда: Москва
Сообщений: 31
env, Я вас неправильно понял. Вот полный отчет

на этот скрипт
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;
select * from #tmp where (s collate cyrillic_general_ci_as) like N'%ab%';

Результат в MSSMS:
+
(2 rows affected)
s
----------
abc

(1 row affected)

s
----------
Abc
abc

(2 rows affected)

s
----------
Abc
abc

(2 rows affected)


Результат в SQLCMD:
+
(2 rows affected)
s
-

(0 rows affected)
s
-

(0 rows affected)
s
-

(0 rows affected)


На этот скрипт
select serverproperty('Collation') as server_collation;
select databasepropertyex(db_name(), 'Collation') as db_collation;
select db_name() as db_name;


Результат в MSSMS:
+
server_collation
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Cyrillic_General_CI_AS

(1 row affected)

db_collation
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Cyrillic_General_CI_AS

(1 row affected)

db_name
--------------------------------------------------------------------------------------------------------------------------------
МОЯ_БД

(1 row affected)


Результат в SQLCMD:
+
server_collation
----------------
Cyrillic_General_CI_AS

(1 rows affected)
db_collation
------------
Cyrillic_General_CI_AS

(1 rows affected)
db_name
-------
МОЯ_БД

(1 rows affected)


Да, результаты совпадают
12 фев 21, 11:45    [22279933]     Ответить | Цитировать Сообщить модератору
 Re: NULL SQLCMD  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 7439
Nevillested,

Кажется у меня кончаются идеи. Попробуйте добавить в параметры вызова sqlcmd
-f 65001
12 фев 21, 12:21    [22279952]     Ответить | Цитировать Сообщить модератору
 Re: NULL SQLCMD  [new]
Nevillested
Member

Откуда: Москва
Сообщений: 31
env,

Если ставить в самое начало-выходной файл пустой, если ставить в конец, то:

server_collation
----------------
Cyrillic_General_CI_AS

(1 rows affected)
db_collation
------------
Cyrillic_General_CI_AS

(1 rows affected)
db_name
-------
SAS_LTL

(1 rows affected)
12 фев 21, 12:42    [22279971]     Ответить | Цитировать Сообщить модератору
 Re: NULL SQLCMD  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 7439
Nevillested,

Меня больше результат скрипта с #tmp табличкой интересует с этим параметром утилиты

Сообщение было отредактировано: 12 фев 21, 13:59
12 фев 21, 14:06    [22280009]     Ответить | Цитировать Сообщить модератору
 Re: NULL SQLCMD  [new]
Nevillested
Member

Откуда: Москва
Сообщений: 31
env, На скрипт с параметром
-f 65001

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;
select * from #tmp where (s collate cyrillic_general_ci_as) like N'%ab%';

Таков результат:

(2 rows affected)
s
-

(0 rows affected)
s
-

(0 rows affected)
s
-

(0 rows affected)
12 фев 21, 14:19    [22280023]     Ответить | Цитировать Сообщить модератору
 Re: NULL SQLCMD  [new]
env
Member

Откуда: Россия, Москва
Сообщений: 7439
Nevillested,

Чтобы не было недопонимания. Это результат запуска
sqlcmd -S адрес_сервера -d моя_БД -E -W -Q -f 65001
"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;
select * from #tmp where (s collate cyrillic_general_ci_as) like N'%ab%';"> file.txt

?

Сообщение было отредактировано: 12 фев 21, 14:17
12 фев 21, 14:23    [22280027]     Ответить | Цитировать Сообщить модератору
 Re: NULL SQLCMD  [new]
Nevillested
Member

Откуда: Москва
Сообщений: 31
env,

sqlcmd -S адрес_сервера -f 65001 -d моя_бд -E -s',' -W -Q 
"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;
select * from #tmp where (s collate cyrillic_general_ci_as) like N'%ab%';" > file.txt

Вот свежак скопировал-вставил, добавил только переносы на новую строку для читабельности
12 фев 21, 14:27    [22280030]     Ответить | Цитировать Сообщить модератору
 Re: NULL SQLCMD  [new]
Nevillested
Member

Откуда: Москва
Сообщений: 31
env
Nevillested,
sqlcmd -S адрес_сервера -d моя_БД -E -W -Q -f 65001
"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;
select * from #tmp where (s collate cyrillic_general_ci_as) like N'%ab%';"> file.txt


Если ставить параметр -Q не непосредственно перед самим текстом моего запроса, то он дает пустой файл, т.е. как Вы показали.
Скопировал Ваш код, вставил, поправил свой адрес сервера, поправил БД, поменял местами -Q и -f 65001 такой же результат:
(2 rows affected)
s
-

(0 rows affected)
s
-

(0 rows affected)
s
-

(0 rows affected)
12 фев 21, 14:31    [22280036]     Ответить | Цитировать Сообщить модератору
 Re: NULL SQLCMD  [new]
invm
Member

Откуда: Москва
Сообщений: 9635
Nevillested
Вот прямо-таки полный со всеми фильтрами
Жуть.

1. Облегчите жизнь себе и серверу и упростите запрос
declare @a DATE set @a=cast(getdate() as date); 

SELECT top (1)   
 a.min_run,
 convert(varchar,(cast((a.max_run - a.min_run) as time)), 20) as work,
 a.max_run,
 t.statik 
FROM
 [table] t cross apply
 (
  select
   min(time_run), max(time_end)
  from
   [table]
  where
   cast(time_run as date) = @a and name like '%olga%' and name not like '%ivanova%'
 ) a(min_run, max_run);


2. Есть возможность получить планы выполнения?
12 фев 21, 16:41    [22280148]     Ответить | Цитировать Сообщить модератору
 Re: NULL SQLCMD  [new]
Nevillested
Member

Откуда: Москва
Сообщений: 31
invm
Nevillested
Вот прямо-таки полный со всеми фильтрами
Жуть.

1. Облегчите жизнь себе и серверу и упростите запрос
declare @a DATE set @a=cast(getdate() as date); 

SELECT top (1)   
 a.min_run,
 convert(varchar,(cast((a.max_run - a.min_run) as time)), 20) as work,
 a.max_run,
 t.statik 
FROM
 [table] t cross apply
 (
  select
   min(time_run), max(time_end)
  from
   [table]
  where
   cast(time_run as date) = @a and name like '%olga%' and name not like '%ivanova%'
 ) a(min_run, max_run);


2. Есть возможность получить планы выполнения?


Колдовство!
Я не понял нихрена с Вашего кода, надо сидеть прям разбираться как это вообще произошло.
Заменил на свои данные, ни шагу влево/вправо
Проверил в MSSQL-супер, данные такие же, как у меня
Проверил в sqlcmd-снова нулы...

UPD
Проверил опытным путем, косяк в where:
если я уберу
name like '%olga%'

и все остальное оставлю-отрабатывает.

или если я уберу
name not like '%ivanova%'

и все остальное оставлю-также отрабатывает.
пачиму...

Сообщение было отредактировано: 12 фев 21, 18:07
12 фев 21, 18:12    [22280182]     Ответить | Цитировать Сообщить модератору
 Re: NULL SQLCMD  [new]
Nevillested
Member

Откуда: Москва
Сообщений: 31
invm
Nevillested
Вот прямо-таки полный со всеми фильтрами
Жуть.

1. Облегчите жизнь себе и серверу и упростите запрос

Вот это я понимаю руки откуда надо)
12 фев 21, 18:15    [22280184]     Ответить | Цитировать Сообщить модератору
 Re: NULL SQLCMD  [new]
Nevillested
Member

Откуда: Москва
Сообщений: 31
Попробовал фильтр IN и перечислил конкретно нужные statik через запятую
Результат уже лучше:
min_run'work'max_run'statik
---------'------------------'---------'-------------
Дата_время'Время'NULL'NICE!

(1 rows affected)

Теперь надо понять, почему даёт null в третьем столбце, хотя в mssql никакого нула на этот же запрос нету.
15 фев 21, 11:52    [22281007]     Ответить | Цитировать Сообщить модератору
 Re: NULL SQLCMD  [new]
Nevillested
Member

Откуда: Москва
Сообщений: 31
Nevillested
Попробовал фильтр IN и перечислил конкретно нужные statik через запятую
Результат уже лучше:
min_run'work'max_run'statik
---------'------------------'---------'-------------
Дата_время'Время'NULL'NICE!

(1 rows affected)

Теперь надо понять, почему даёт null в третьем столбце, хотя в mssql никакого нула на этот же запрос нету.


Короче я немного ошибся, и все-таки работает и третий столбец.
Решение конечно через костыль, но всё же...решение
15 фев 21, 16:32    [22281229]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Microsoft SQL Server Ответить