powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / PATHINDEX не может найти возврат каретки. Что не так?
5 сообщений из 5, страница 1 из 1
PATHINDEX не может найти возврат каретки. Что не так?
    #39972606
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
IF EXISTS (SELECT * FROM sysobjects WHERE NAME = 'ttt' AND xtype = 'IF')
DROP function dbo.ttt
GO

CREATE FUNCTION dbo.ttt( @USERLISTID VARCHAR(255) ) RETURNS TABLE AS
RETURN SELECT 1 AS A
go

DECLARE @Command NVARCHAR(4000) = N' CREATE FUNCTION DBO.TTT( @USERLISTID VARCHAR(255) ) RETURNS TABLE AS RETURN SELECT 1 AS A ';

SELECT @Command = OBJECT_DEFINITION(OBJECT_ID('ttt'))

DECLARE @cmd nvarchar(4000)= REPLACE(UPPER(@Command), N' ', N' ')
set @cmd = REPLACE(@cmd, N' ', N' ')
DECLARE @tbl TABLE(val int)

INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(10)+NCHAR(13)+N'BEGIN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(10)+NCHAR(13)+N'RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS '+NCHAR(10)+NCHAR(13)+N'RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(10)+NCHAR(13)+N' RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS '+NCHAR(10)+NCHAR(13)+N' RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(10)+N' RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(10)+N'RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(13)+N'RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS '+NCHAR(10)+N'RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(13)+N' RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS '+NCHAR(13)+N'RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS BEGIN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS RETURN%', @cmd)

select max(val), @cmd from @tbl
...
Рейтинг: 0 / 0
PATHINDEX не может найти возврат каретки. Что не так?
    #39972607
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неправда, ищет.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
declare
    @s      nvarchar (max) = N'AS' + nchar(10)+ N'begin'
    , @p    nvarchar (max) = N'%' + nchar(10) + '%N'

select
    1
where
     @s like @p

select
    1
where
     patindex ( @p, @s ) > 0



-----------
1


-----------
1
...
Рейтинг: 0 / 0
PATHINDEX не может найти возврат каретки. Что не так?
    #39972609
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваш паттерн вот этот:

Код: sql
1.
INSERT INTO @tbl SELECT PATINDEX(N'%as'+NCHAR(13)+NCHAR(10)+N'return%', @cmd)
...
Рейтинг: 0 / 0
PATHINDEX не может найти возврат каретки. Что не так?
    #39972658
godsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lepsik
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
IF EXISTS (SELECT * FROM sysobjects WHERE NAME = 'ttt' AND xtype = 'IF')
DROP function dbo.ttt
GO

CREATE FUNCTION dbo.ttt( @USERLISTID VARCHAR(255) ) RETURNS TABLE AS
RETURN SELECT 1 AS A
go

DECLARE @Command NVARCHAR(4000) = N' CREATE FUNCTION DBO.TTT( @USERLISTID VARCHAR(255) ) RETURNS TABLE AS RETURN SELECT 1 AS A ';

SELECT @Command = OBJECT_DEFINITION(OBJECT_ID('ttt'))

DECLARE @cmd nvarchar(4000)= REPLACE(UPPER(@Command), N' ', N' ')
set @cmd = REPLACE(@cmd, N' ', N' ')
DECLARE @tbl TABLE(val int)

INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(10)+NCHAR(13)+N'BEGIN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(10)+NCHAR(13)+N'RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS '+NCHAR(10)+NCHAR(13)+N'RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(10)+NCHAR(13)+N' RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS '+NCHAR(10)+NCHAR(13)+N' RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(10)+N' RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(10)+N'RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(13)+N'RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS '+NCHAR(10)+N'RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(13)+N' RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS '+NCHAR(13)+N'RETURN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS BEGIN%', @cmd)
INSERT INTO @tbl SELECT PATINDEX(N'%AS RETURN%', @cmd)

select max(val), @cmd from @tbl



попробуйте заменить, к примеру,
Код: sql
1.
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(10)+NCHAR(13)+N'RETURN%', @cmd)


на
Код: sql
1.
INSERT INTO @tbl SELECT PATINDEX(N'%AS'+NCHAR(13)+NCHAR(10)+N'RETURN%', @cmd)



PS. а вообще, есть такой режим HEX у практически любого редактора :)
...
Рейтинг: 0 / 0
PATHINDEX не может найти возврат каретки. Что не так?
    #39972770
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lepsik,

вы последовательность байт перепутали, обычно возврат каретки следует перед переносом строки то есть нужно искать не

char(10) + char(13)

а наоборот char(13) + char(10)

это наглядно видно в байт-представлении строки
Код: sql
1.
2.
3.
4.
declare @test varchar(255) = 'a
b';

select cast(@test as varbinary(256)), cast(char(10) as varbinary) as [lf], cast(char(13) as varbinary) as [cr]



string lf cr0x61 0D0A 62 0x0A 0x0D
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / PATHINDEX не может найти возврат каретки. Что не так?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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