Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Cerebrum Member Откуда: Омикрон Персей 8 Сообщений: 7990 |
Приветствую! Комрады, нужна ваша дружеская помощь! Столкнулся со странным поведением простейшего запроса: CREATE TABLE [#tempAccount] ( [id] int NOT NULL, [account] nvarchar(50) NOT NULL, ) GO INSERT #tempAccount VALUES (0, N'abc') INSERT #tempAccount VALUES (1, N'def') INSERT #tempAccount VALUES (2, N'ghi') INSERT #tempAccount VALUES (3, N'jkl') CREATE TABLE [#tempBases] ( [optime] datetime NOT NULL, [owner] int NOT NULL, [base_id] int NOT NULL, ) GO INSERT [#tempBases] VALUES (GetDate(), 0, 40) INSERT [#tempBases] VALUES (GetDate(), 1, 50) INSERT [#tempBases] VALUES (GetDate(), 2, 60) INSERT [#tempBases] VALUES (GetDate(), 3, 70) SELECT (CONCAT(a.[account], FORMAT(r.[base_id], N'\.idd\_00#'))) FROM [#tempBases] AS r JOIN [#tempAccount] AS a ON a.[id] = r.[owner] WHERE DATEDIFF(day, r.[optime], GETDATE()) = 0 DROP TABLE #tempAccount DROP TABLE #tempBases Для этих тестовых таблиц все ок, запрос отрабатывает как и ожидается, и возвращает: abc.idd_040 def.idd_050 ghi.idd_060 jkl.idd_070 Есть аналогичные 2 таблицы, но в рабочей базе, отличие от тестового примера выше только названиями таблиц и полей. Плюс у одной из них есть ограничение на уникальность значений в одном из полей (id). Больше никаких отличий, форматы данных совпадают. Проблема в том, что в рабочей базе этот же SQL запрос всегда возвращает только первый кусок данных, т.е. a.[account]. как-будто падает FORMAT и возвращает пустую строку, вместо .df.XXX. Самое прикольное и непонятное в том, что если написать так SELECT a.[account], r.[base_id] FROM... то есть убрать все форматы и конкаты, то все будет ок - получим две колонки с нормальными значениями. Научите, как сделать правильно, чтобы и на рабочей БД тоже самое работало, как в тестовом примере. Поскольку результат этого запроса будет выплюнут хранимой процедурой для последующей машинной обработки, мне нужно чтобы на выходе был один столбец, а не десяток, данные из которых конкатенируются в какой-то дополнительный столбец. Заранее спасибо -------------------------------------------------------------- o(O_O)o |
9 сен 19, 15:07 [21966937] Ответить | Цитировать Сообщить модератору |
Cerebrum Member Откуда: Омикрон Персей 8 Сообщений: 7990 |
разобрался сам Это из-за null-терминированных строк в рабочей #tempAccount. Сделал пока вот так (CONCAT(SUBSTRING(a.[account], 0, LEN(a.[account])), FORMAT(r.[base_id], N'\.idd\_00#'))) |
9 сен 19, 16:00 [21967017] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |