powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / try внутри запроса
14 сообщений из 14, страница 1 из 1
try внутри запроса
    #39692547
NewIvanovec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть 1000 строк.

нужно найти строки, где будет ошибка оператора CAST([Content] AS XML) .
"XML parsing: ..."

можно ли это сделать без курсора?
...
Рейтинг: 0 / 0
try внутри запроса
    #39692550
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
try_convert()
...
Рейтинг: 0 / 0
try внутри запроса
    #39692553
Владимир Затуливетер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробовал тоже, но похоже он с xml не дружит.

Код: sql
1.
select try_cast('xml?' as xml), try_cast('<xml></xml>' as xml)



Код: plaintext
1.
2.
3.
4.
5.
                                                           
------------------------- -----------------------------------
xml?                      <xml />

(1 row affected)
...
Рейтинг: 0 / 0
try внутри запроса
    #39692554
NewIvanovec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевичtry_convert()
2016 сервер выдает ошибку

'TRY_CONVERT' is not a recognized built-in function name.
...
Рейтинг: 0 / 0
try внутри запроса
    #39692556
NewIvanovec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отлично, try_cast то, что надо
Спасибо большое, господа!
...
Рейтинг: 0 / 0
try внутри запроса
    #39692557
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NewIvanovecесть 1000 строк.

нужно найти строки, где будет ошибка оператора CAST([Content] AS XML) .
"XML parsing: ..."

можно ли это сделать без курсора?

Лехко.

select top(n)
и метод деления отрезка пополам

гарнтирует обнаружение гадины за log2(1000) = 10 селектов.
...
Рейтинг: 0 / 0
try внутри запроса
    #39692567
Владимир Затуливетер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Затуливетерпопробовал тоже, но похоже он с xml не дружит.

Код: sql
1.
select try_cast('xml?' as xml), try_cast('<xml></xml>' as xml)




Код: plaintext
1.
2.
3.
4.
5.
                                                           
------------------------- -----------------------------------
xml?                      <xml />

(1 row affected)


Кто-нибудь скажет почему у меня не работает?...
я в общем-то ожидал NULL в первом столбце как например с int где у меня все верно возвращается.
Код: sql
1.
select try_cast('not int' as int), try_cast('1234123' as int)


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
----------- -----------
NULL        1234123

(1 row affected)

Microsoft SQL Server 2017 (RTM-GDR) (KB4293803) - 14.0.2002.14 (X64) 
	Jul 21 2018 07:47:45 
	Copyright (C) 2017 Microsoft Corporation
	Developer Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 17134: )
...
Рейтинг: 0 / 0
try внутри запроса
    #39692579
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Затуливетер,

у Вас же нет требований проверки или операций.

select cast('aaa' as XML)
...
Рейтинг: 0 / 0
try внутри запроса
    #39692598
Владимир Затуливетер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем я понять не могу, как можно было выбрать только строки с валидным xml?
Автору темы try_cast помог как-то, только мне непонятно как именно.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with cteData (val)
as (
              select '<xml>234</xml>'
    union all select '<xml></xml>'
    union all select 'lskdjf'
)
select *
from cteData d
where try_cast(d.val as xml) is not null -- это не работает, все равно возвращает 3 строки
...
Рейтинг: 0 / 0
try внутри запроса
    #39692611
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Затуливетер,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with cteData (val)
as (
              select '<xml>234</xml>'
    union all select '<xml></xml>'
    union all select 'lskdjf'
)
select *
from cteData d
where try_cast(d.val as xml).exist('/*') = 1
...
Рейтинг: 0 / 0
try внутри запроса
    #39692614
Владимир Затуливетер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff,
ах вот оно как
...
Рейтинг: 0 / 0
try внутри запроса
    #39692616
Владимир Затуливетер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так тоже работает, поэтому непонятно причем тут try_case.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with cteData (val)
as (
              select '<xml>234</xml>'
    union all select '<xml></xml>'
    union all select 'lskdjf'
)
select *
from cteData d
where cast(d.val as xml).exist('/*') = 1
...
Рейтинг: 0 / 0
try внутри запроса
    #39692622
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Затуливетер,

Код: sql
1.
where try_cast(d.val as xml).exist('/text()') = 0



вот так даже правильней будет имхо
...
Рейтинг: 0 / 0
try внутри запроса
    #39692625
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Затуливетер,

у вас любой текст не содержащий спец символы разметки может быть представлен как тестовый узел xml поэтому cast и не ругается

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select cast('something&' as xml)
go
select cast('<something' as xml)
go
select cast('something>' as xml)
go
select try_cast('something&' as xml)
go
select try_cast('<something' as xml)
go
select try_cast('something>' as xml)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / try внутри запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]