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

Откуда:
Сообщений: 185
есть определенный запрос, он падает на приведении строки к гуиду. Падает соответственно на какойто строке, так как он рабочий и долго работал нормально. Но чтото пошло не так. Как записать в лог ту строку на которой падает? try catch может както?
14 июн 17, 13:46    [20563610]     Ответить | Цитировать Сообщить модератору
 Re: Найти плохую запись  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Житель парагвая,

если версия 2012+

SELECT * FROM Table WHERE TRY_CONVERT(uniqueidentifier,Column) IS NULL

если нет
то нагуглить проверку типа
CREATE FUNCTION dbo.isuniqueidentifier (@ui varchar(50))  
RETURNS bit AS  
BEGIN

RETURN case when
    substring(@ui,9,1)='-' and
    substring(@ui,14,1)='-' and
    substring(@ui,19,1)='-' and
    substring(@ui,24,1)='-' and
    len(@ui) = 36 then 1 else 0 end

END
14 июн 17, 13:51    [20563628]     Ответить | Цитировать Сообщить модератору
 Re: Найти плохую запись  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
или вот посимпатичней

WHERE Column NOT LIKE  REPLACE('00000000-0000-0000-0000-000000000000', '0', '[0-9a-fA-F]')
14 июн 17, 13:53    [20563635]     Ответить | Цитировать Сообщить модератору
 Re: Найти плохую запись  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3458
TaPaK
Житель парагвая,

если версия 2012+

SELECT * FROM Table WHERE TRY_CONVERT(uniqueidentifier,Column) IS NULL

если нет
то нагуглить проверку типа
CREATE FUNCTION dbo.isuniqueidentifier (@ui varchar(50))  
RETURNS bit AS  
BEGIN

RETURN case when
    substring(@ui,9,1)='-' and
    substring(@ui,14,1)='-' and
    substring(@ui,19,1)='-' and
    substring(@ui,24,1)='-' and
    len(@ui) = 36 then 1 else 0 end

END



сомнительный критерий, совсем.
14 июн 17, 14:43    [20563856]     Ответить | Цитировать Сообщить модератору
 Re: Найти плохую запись  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7397
Житель парагвая,

так выполняйте валидацию данных до вставки.
14 июн 17, 15:09    [20563986]     Ответить | Цитировать Сообщить модератору
 Re: Найти плохую запись  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
Житель парагвая, для начала неплохо понять какого рода запрос и как именно он поломался.
14 июн 17, 16:35    [20564412]     Ответить | Цитировать Сообщить модератору
 Re: Найти плохую запись  [new]
Cammomile
Member

Откуда:
Сообщений: 1212
Например с инсертами можно определиться вот так
DECLARE
@Table TABLE ( x tinyint )

BEGIN TRY
INSERT INTO @Table
SELECT 1
UNION
SELECT 2
UNION
SELECT 'a' 

END TRY
BEGIN CATCH
PRINT Error_Message( ) 
END CATCH
14 июн 17, 16:37    [20564418]     Ответить | Цитировать Сообщить модератору
 Re: Найти плохую запись  [new]
VGalamakh
Member

Откуда: Киев (Альба)
Сообщений: 66
1. Делаешь селект с ордер бай.
2. Падает
3. Потом селект без приведения
4. Смотришь на строку - (Количество строк в п.1) + 1
15 июн 17, 17:37    [20567865]     Ответить | Цитировать Сообщить модератору
 Re: Найти плохую запись  [new]
invm
Member

Откуда: Москва
Сообщений: 9122
VGalamakh
4. Смотришь на строку - (Количество строк в п.1) + 1
Это количество всегда 0.
15 июн 17, 18:59    [20568157]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить