|   |   | 
| 
 | Как в sql базе найти нужную запись только по ошибке отпочкования РИБ? | ☑ | ||
|---|---|---|---|---|
| 0
    
        Обработка 25.08.21✎ 12:09 | 
        Есть база Розница в скуле объем 96 ГБ
 При отпочковании примерно 32 млн записей регистрируются. И на 40% процесса отпочкования вываливается ошибка. Ошибка в значении типа 'Дата' Не удалось создать начальный образ по причине: Ошибка в значении типа "дата" Дата '23.09.1190 0:00:00' не может быть записана в базу данных на MS SQL Server с нулевым смещением дат | |||
| 1
    
        Обработка 25.08.21✎ 12:12 | 
        Есть ли возможность прямо в скуле искать эту траблу?     | |||
| 2
    
        Ёпрст гуру 25.08.21✎ 12:13 | 
        (1) яя, натюрлих.
 select date from table where date = .... | |||
| 3
    
        Обработка 25.08.21✎ 12:15 | 
        Я наверно при отпочковании забыл смещение установить 2000.
 Но ведь дата видимо такая в реале 23.09.2119 0:00:00' | |||
| 4
    
        Обработка 25.08.21✎ 12:15 | 
        Все равно искать и убрать к черту надо.     | |||
| 5
    
        BeerHelpsMeWin 25.08.21✎ 12:17 | 
        Кто-то уверенно ввел док 2119 годом вместо 2019?     | |||
| 6
    
        Обработка 25.08.21✎ 12:22 | 
        Было бы круто написать в скуле запрос поиск по полем типа дата значение равное больше определенного или на конкретное значение...
 Но я особо не умею. | |||
| 7
    
        youalex 25.08.21✎ 13:41 | 
        как то так можно, если по конкретному полю _Date_Time
 declare tabname nvarchar(150) declare t table (tabname nvarchar(150)) declare res table (tabname nvarchar(150), _Number nvarchar(150), _Date_Time datetime2(0)) insert into t (tabname) select DISTINCT TOP 77 c.TABLE_NAME from INFORMATION_SCHEMA.COLUMNS c where c.COLUMN_NAME = '_Date_Time' SET tabname = (SELECT TOP 1 tabname from t) WHILE tabname IS NOT NULL BEGIN insert into res (tabname, _Number, _Date_Time) EXEC ('select top 77 ''' + tabname + ''' tabname, _Number, _Date_Time from ' + tabname + ' where _Date_Time >= ''4021-12-01'' ') DELETE FROM t WHERE tabname = tabname SET tabname = (SELECT TOP 1 tabname from t) END select * from res | |||
| 8
    
        youalex 25.08.21✎ 13:42 | 
        (7) движок сайта заменяет амперсанды на болд)
 res | |||
| 9
    
        Обработка 25.08.21✎ 14:14 | 
        (7) (8) Спасибо но ничего не понятно. ))     | |||
| 10
    
        youalex 25.08.21✎ 14:19 | 
        (9) в этом скрипте у переменных скуля tabname, res, t - должны быть амперсанды в начале
 where _Date_Time >= ''4021-12-01'' - здесь условие по дате top 77 - можно убрать | |||
| 11
    
        youalex 25.08.21✎ 14:50 | 
        (10) т.е не амперсанд, а собачка "@"
 https://savetext.ru/fDEjFBxG | |||
| 12
    
        Ёпрст гуру 25.08.21✎ 16:10 | 
        (7)  дык.. 77, не мало ?     | |||
| 13
    
        Ёпрст гуру 25.08.21✎ 16:11 | 
        табличек жешь и больше могёт быть
 + и..тут может вообще все реквизиты с типом дата лучше проверить ? | |||
| 14
    
        youalex 25.08.21✎ 16:11 | 
        (12) норм, мне хватило)     | |||
| 15
    
        Обработка 26.08.21✎ 06:33 | 
        Ошибка вылетело 
 Msg 207, Level 16, State 1, Line 2 Недопустимое имя столбца "_Number". | |||
| 16
    
        Обработка 26.08.21✎ 06:33 | 
        Вот:
 declare tabname nvarchar(150) declare t table (tabname nvarchar(150)) declare res table (tabname nvarchar(150), _Number nvarchar(150), _Date_Time datetime2(0)) insert into t (tabname) select DISTINCT TOP 77 c.TABLE_NAME from INFORMATION_SCHEMA.COLUMNS c where c.COLUMN_NAME = '_Date_Time' SET tabname = (SELECT TOP 1 tabname from t) WHILE tabname IS NOT NULL BEGIN insert into res (tabname, _Number, _Date_Time) EXEC ('select top 100''' + tabname + ''' tabname, _Number, _Date_Time from ' + tabname + ' where _Date_Time >= ''2118-12-01'' ') DELETE FROM t WHERE tabname = tabname SET tabname = (SELECT TOP 1 tabname from t) END select * from res | |||
| 17
    
        youalex 26.08.21✎ 08:44 | 
        (16) вот этот должен искать по идее по всем полям (на тяжелых базах будет долго, т.к. запрос по каждому сочетанию таблица/колонка с типом дата)
 https://savetext.ru/VDtUk5ag | |||
| 18
    
        Обработка 26.08.21✎ 09:08 | 
        (17) Перевел с русского 
 получилось так | |||
| 19
    
        Обработка 26.08.21✎ 09:08 | 
        declare tabname nvarchar ( 150 )
 declare @colname nvarchar ( 150 ) declare table t (tabname nvarchar ( 150 ) , tabname nvarchar ( 150 ) ) declare @query nvarchar ( max ) declare table res (tabname nvarchar ( 150 ) , tabname nvarchar ( 150 ) , value datetime2 ) set NOCOUNT on insert into t (tabname, datetime2 ) select DISTINCT c.TABLE_NAME, c.COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS c where c.DATA_TYPE in ( 'datetime' , 'datetime2' ) select TOP 1 tabname = tabname, @colname = colname из t WHILE @colname IS NOT NULL BEGIN PRINT CONCAT ( tabname, '.' , @Colname ) set @query = 'select top 1' 'tabname' 'tabname,' '@colname' 'colname, @colname value из tabname, где @colname> = ' ' 4300-12-01 ' ' ' SET @query = replace ( @query, 'tabname' , tabname ) SET @query = replace ( @query, '@colname' , @colname ) insert intro res (tabname, _Number, _Date_Time) EXEC ( @ запрос ) Delete from t, WHERE tabname = tabname и colname = @colname SET @colname = null SELECT TOP 1 tabname = tabname, @colname = colname из t END select * from res | |||
| 20
    
        Обработка 26.08.21✎ 09:09 | 
        По ходу ошибки:
 Msg 156, Level 15, State 1, Line 3 Неправильный синтаксис около ключевого слова "table". Msg 156, Level 15, State 1, Line 5 Неправильный синтаксис около ключевого слова "table". Msg 1087, Level 15, State 2, Line 9 Необходимо объявить табличную переменную "@t". Msg 102, Level 15, State 1, Line 13 Неправильный синтаксис около конструкции "из". Msg 102, Level 15, State 1, Line 21 Неправильный синтаксис около конструкции "@tabname". Msg 102, Level 15, State 1, Line 27 Неправильный синтаксис около конструкции "@res". Msg 137, Level 15, State 2, Line 28 Необходимо объявить скалярную переменную "@". Msg 1087, Level 15, State 2, Line 30 Необходимо объявить табличную переменную "@t". Msg 102, Level 15, State 1, Line 33 Неправильный синтаксис около конструкции "из". Msg 1087, Level 15, State 2, Line 36 Необходимо объявить табличную переменную "@res". | |||
| 21
    
        youalex 26.08.21✎ 09:12 | 
        (18) >Перевел с русского 
 Не понял, где там русский, это скрипт tsql | |||
| 22
    
        acanta 26.08.21✎ 09:16 | 
        Если это 7ка, то можно обойти, мд-шник заготовить без регистрации или с регистрацией только справочники, создать периферийную базу, затем заменить на мд-шник с обычной регистрацией и зарегистрировать нужные документы программно записать(), можно даже остатки с какого-то числа и первичку с какого-то числа. Глючный документ в периферийную не пойдет.     | |||
| 23
    
        youalex 26.08.21✎ 09:19 | ||||
| 24
    
        Обработка 26.08.21✎ 09:25 | 
        (21) Ой пардон у меня браузер автоматом переводил оказывается. )))     | |||
| 25
    
        Обработка 26.08.21✎ 09:33 | 
        (21)(23) Спасибо запрос сработал. Но увы вывел кучу данных не понятнго.Там смещение дат не даст мне найти видимо надо в 1С искать
 Вот _AccumRg6494 _Period 4015-11-12 00:00:00.0000000 _AccumRg6503 _Period 4018-09-20 18:02:26.0000000 _AccumRg6536 _Period 4016-07-14 21:21:11.0000000 _AccumRg6557 _Period 4016-07-14 21:21:11.0000000 _AccumRg6602 _Period 4016-07-14 21:21:11.0000000 _AccumRg6620 _Period 4018-07-25 18:10:03.0000000 _AccumRg6640 _Period 4016-03-14 16:27:12.0000000 _AccumRg6655 _Period 4015-11-12 00:00:00.0000000 _AccumRg6697 _Period 4019-08-20 18:17:54.0000000 _AccumRg6731 _Period 4019-08-01 15:58:19.0000000 _AccumRg6747 _Period 4019-08-13 10:00:02.0000000 _AccumRg6768 _Period 4015-11-12 00:00:00.0000000 _AccumRg6865 _Fld7276 4015-12-24 20:06:38.0000000 | |||
| 26
    
        Обработка 26.08.21✎ 09:42 | 
        Перебил дату именно как у вас. Получилось такое
 ........... .............. _AccumRgT7835 _Period 5999-11-01 00:00:00.0000000 _AccumRgT8714 _Period 5999-11-01 00:00:00.0000000 _AccumRgT8758 _Period 5999-11-01 00:00:00.0000000 _AccumRgT9757 _Period 5999-11-01 00:00:00.0000000 _Document9570 _Fld9574 5018-02-09 00:00:00.0000000 _Document9570 _Fld9578 5085-12-04 00:00:00.0000000 _InfoRg7551 _Fld7555 4306-07-09 00:00:00.0000000 _Reference48 _Fld7581 4707-04-19 00:00:00.0000000 | |||
| 27
    
        youalex 26.08.21✎ 09:43 | 
        (25) datetime - С января 1753 года до 31 декабря 9999 года
 т.е. по идее тебе нужно искать даты (с учетом смещения 2000) where @colname < '3753-01-01' А потом через СтруктураХраненияИнформационнойБазы() смотреть что это | |||
| 28
    
        youalex 26.08.21✎ 09:45 | 
        (27) или нет)     | |||
| 29
    
        Обработка 26.08.21✎ 09:50 | 
        (27) При таком условии вылезло 406 значений в разных таблицах.
 Вот отрывок _AccumRg6494 _Period 4015-11-12 00:00:00.0000000 _AccumRg6503 _Period 4018-09-20 18:02:26.0000000 _AccumRg6536 _Period 4016-07-14 21:21:11.0000000 _AccumRg6557 _Period 4016-07-14 21:21:11.0000000 _AccumRg6602 _Period 4016-07-14 21:21:11.0000000 _AccumRg6620 _Period 4018-07-25 18:10:03.0000000 _AccumRg6640 _Period 4016-03-14 16:27:12.0000000 _AccumRg6655 _Period 4015-11-12 00:00:00.0000000 _AccumRg6697 _Period 4019-08-20 18:17:54.0000000 _AccumRg6731 _Period 4019-08-01 15:58:19.0000000 ........................ ........ _ScheduledJobs10669 _FinishTime 4021-04-01 10:00:28.0000000 _ScheduledJobs10669 _StartTime 4021-04-01 10:00:01.0000000 _Seq7118 _Period 4015-11-17 09:38:06.0000000 _SeqB7119 _Period 4021-05-31 23:59:59.0000000 _UsersWorkHistory _Date 4018-01-25 12:50:24.0000000 Config Creation 4019-09-06 15:27:01.0000000 Config Modified 4019-09-06 15:27:01.0000000 Files Creation 4016-01-29 14:33:53.0000000 Files Modified 4016-11-17 05:44:23.0000000 Params Creation 4017-03-27 16:10:36.0000000 Params Modified 4017-03-27 16:10:36.0000000 v8users Changed 4018-09-20 11:40:13.0000000 | |||
| 30
    
        youalex 26.08.21✎ 10:01 | 
        (29) как это? если 4018-09-20 никак не меньше 3753-01-01
 тут по идее еще нужно учитывать пустые даты ,и типы где только время, навскидку будет такое условие, с учетом текущего смещения 2000 (кавычки из скрипта) where @colname between ''2001-01-02'' and ''3753-01-01'' Я у себя нашел даты рождения 11.11.0179 0:00:00 ) | |||
| 31
    
        Обработка 26.08.21✎ 10:10 | 
        (27) Я так и не понял почему я ищу именно в этом диапазоне
 "datetime - С января 1753 года до 31 декабря 9999 года" или же ''2001-01-02'' and ''3753-01-01'' Мне же нужно найти даты больше 2100 года хотя бы. А если нарушения искать надо искать даты до 1920 года Ну не бывает дата рожение сотра до 1920 и то же не ложите в учет это все что больше 2025 года например. | |||
| 32
    
        Обработка 26.08.21✎ 10:11 | 
        (30) При этом выходит 
 _Document7861 _Fld7865 2121-02-12 00:00:00.0000000 _Document7861 _Fld7868 2019-02-21 00:00:00.0000000 _Document9570 _Fld9574 2217-10-06 00:00:00.0000000 _Document9570 _Fld9578 2200-04-19 00:00:00.0000000 _InfoRg7551 _Fld7555 2003-03-03 00:00:00.0000000 _InfoRg7752 _Fld7758 2217-01-01 00:00:00.0000000 _InfoRg7752 _Fld7759 3019-12-31 00:00:00.0000000 _Reference103 _Fld1255 3196-05-11 00:00:00.0000000 _Reference48 _Fld7581 2002-06-23 00:00:00.0000000 Но по первых двум видам дока ищу таких документов в базе нет по описанию ((( | |||
| 33
    
        Обработка 26.08.21✎ 10:14 | 
        Из этого списка нашел 1 регистр и 2 справочника и все.     | |||
| 34
    
        youalex 26.08.21✎ 10:16 | 
        (31) 
 Я исходил из ошибки в (0) "datetime - С января 1753 года до 31 декабря 9999 года" - это ограничение типа datetime, это то на что изначально ругалось в (0) т.е. если перекатывать из базы со смещением 2000 в базу без смещения будет этот глючным диапазон 2001-01-02- в базе со смещением это 2 января 0001 года. Т.е. это не пустая дата, и не реквизит "только время" (33) так не бывает, точно одна и та же база? | |||
| 35
    
        Обработка 26.08.21✎ 10:18 | 
        (34) Условие в периоде понял. на счет 33 правы случайно не ту базу таблицы глянул ))     | |||
| 36
    
        Обработка 26.08.21✎ 10:35 | 
        Алексей, огромное спасибо за скрипт и за разъяснения.
 Для структуры таблиц и полей раздобыл в гугле обработку еще. Можно теперь всегда ковырять даты с грехами. С меня магарыч тебе. Питеру привет. Я там учился 5 лет... | |||
| 37
    
        youalex 26.08.21✎ 11:02 | 
        (36) да не за что, развлёкся немного)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |