Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / В чем ошибка синтаксиса создания процедуры? / 25 сообщений из 25, страница 1 из 1
27.09.2019, 17:27
    #39868042
В чем ошибка синтаксиса создания процедуры?
Здравствуйте!

Попробовал определить свою процедуру вида:

Код: 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.
USE mydb;
GO
CREATE PROCEDURE bng_normalize_ps ( ps_id uniqueidentifier, u_name VARCHAR(50), u_type VARCHAR(50) ) AS
BEGIN

	WITH Recursive (link, n_type, n_name, F_Parent )
	AS
	(
		SELECT
			i.link
			, ityp.C_Name n_type
			, i.C_Name as n_name
			, s.F_Parent
		FROM ED_Network_Items i
		JOIN ES_Network_Items_Types t on i.F_Network_Items_Types = t.LINK
		JOIN ED_Network_Struct s on s.LINK = i.LINK
		WHERE
			ni.link = ps_id
		UNION ALL
		SELECT
			i.link
			, ityp.C_Name n_type
			, i.C_Name as n_name
			, s.F_Parent
		FROM ED_Network_Items i
		JOIN ES_Network_Items_Types t on i.F_Network_Items_Types = t.LINK
		JOIN ED_Network_Struct s on s.LINK = i.LINK
		JOIN Recursive r ON s.F_Parent = r.link

	)
END;


Получаю ошибку:
авторMsg 102, Level 15, State 1, Procedure bng_normalize_ps, Line 1 [Batch Start Line 2]
Неправильный синтаксис около конструкции "ps_id".

Скажите, пожалуйста, в чем моя ошибка?
...
Рейтинг: 0 / 0
27.09.2019, 17:29
    #39868043
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка синтаксиса создания процедуры?
Борис Гаркун,

ну хелп откройте для приличия хоть, или быстрее тему создавать
...
Рейтинг: 0 / 0
27.09.2019, 17:34
    #39868049
В чем ошибка синтаксиса создания процедуры?
кажется понял, без скобок и с @. Спасибо. Наткнулся видимо на синтаксис другой БД
...
Рейтинг: 0 / 0
27.09.2019, 17:36
    #39868051
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка синтаксиса создания процедуры?
Борис Гаркункажется понял, без скобок и с @. Спасибо. Наткнулся видимо на синтаксис другой БД
очень хотелось создать функцию, а получилось что-то
...
Рейтинг: 0 / 0
27.09.2019, 17:38
    #39868056
В чем ошибка синтаксиса создания процедуры?
Как-то так:
Код: 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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
USE OmniUS;
GO
CREATE PROCEDURE bng_normalize_ps 
	@ps_id uniqueidentifier, 
	@u_name VARCHAR(50), 
	@u_type VARCHAR(50) 
AS
BEGIN

	WITH Recursive (link, n_type, n_name, F_Parent )
	AS
	(
		--SELECT intID, intParentID, strDepartmentName
		--FROM tblDepartment e
		--WHERE e.intID = 9 
		--UNION ALL
		--SELECT e.intID, e.intParentID, e.strDepartmentName
		--FROM tblDepartment e
		--	JOIN Recursive r ON e.intParentID = r.intID

		SELECT
			i.link
			, t.C_Name n_type
			, i.C_Name as n_name
			, s.F_Parent
		FROM ED_Network_Items i
		JOIN ES_Network_Items_Types t on i.F_Network_Items_Types = t.LINK
		JOIN ED_Network_Struct s on s.LINK = i.LINK
		WHERE
			i.link = @ps_id
		UNION ALL
		SELECT
			i.link
			, t.C_Name n_type
			, i.C_Name as n_name
			, s.F_Parent
		FROM ED_Network_Items i
		JOIN ES_Network_Items_Types t on i.F_Network_Items_Types = t.LINK
		JOIN ED_Network_Struct s on s.LINK = i.LINK
		JOIN Recursive r ON s.F_Parent = r.link

	)
	SELECT link, n_type, n_name, F_Parent
	FROM Recursive r
END
...
Рейтинг: 0 / 0
27.09.2019, 21:37
    #39868169
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка синтаксиса создания процедуры?
Борис ГаркунЗдравствуйте!

Попробовал определить свою процедуру вида:

Код: 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.
USE mydb;
GO
CREATE PROCEDURE bng_normalize_ps ( ps_id uniqueidentifier, u_name VARCHAR(50), u_type VARCHAR(50) ) AS
BEGIN

	WITH Recursive (link, n_type, n_name, F_Parent )
	AS
	(
		SELECT
			i.link
			, ityp.C_Name n_type
			, i.C_Name as n_name
			, s.F_Parent
		FROM ED_Network_Items i
		JOIN ES_Network_Items_Types t on i.F_Network_Items_Types = t.LINK
		JOIN ED_Network_Struct s on s.LINK = i.LINK
		WHERE
			ni.link = ps_id
		UNION ALL
		SELECT
			i.link
			, ityp.C_Name n_type
			, i.C_Name as n_name
			, s.F_Parent
		FROM ED_Network_Items i
		JOIN ES_Network_Items_Types t on i.F_Network_Items_Types = t.LINK
		JOIN ED_Network_Struct s on s.LINK = i.LINK
		JOIN Recursive r ON s.F_Parent = r.link

	)
END;



Получаю ошибку:
авторMsg 102, Level 15, State 1, Procedure bng_normalize_ps, Line 1 [Batch Start Line 2]
Неправильный синтаксис около конструкции "ps_id".

Скажите, пожалуйста, в чем моя ошибка?Не вижу, где определяется ni?
...
Рейтинг: 0 / 0
28.09.2019, 13:28
    #39868380
PsyMisha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка синтаксиса создания процедуры?
Борис Гаркун,

Вы получите ошибку при выполнении такого запроса безотносительно того, как он будет выполняться - напрямую в студии, через процедуру, через функцию или через вьюху.
Конструкция CTE - не может повиснуть просто в воздухе, нужен ее потребитель, причем порядок последующего пользования этим виртуальным представлением - CTE - имеет так же значение.

Почитайте хелп, ей-богу! Банальный же совершенно вопрос
...
Рейтинг: 0 / 0
30.09.2019, 10:33
    #39868955
В чем ошибка синтаксиса создания процедуры?
Всем спасибо, заработала
...
Рейтинг: 0 / 0
30.09.2019, 10:40
    #39868961
В чем ошибка синтаксиса создания процедуры?
Правда теперь на вот такой ее доработанный вариант ругается на конструкцию IF^
Код: 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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
CREATE PROCEDURE bng_normalize_ps 
	@ps_id uniqueidentifier, 
	@u_name VARCHAR(50), 
	@u_type VARCHAR(50) 
AS
BEGIN

	WITH Recursive (link, n_type, n_name, F_Parent )
	AS
	(
		SELECT
			i.link
			, t.C_Name n_type
			, i.C_Name as n_name
			, s.F_Parent
			-- , s.F_Child
		FROM ED_Network_Items i
		JOIN ES_Network_Items_Types t on i.F_Network_Items_Types = t.LINK
		LEFT JOIN ED_Network_Struct s on s.F_Child = i.LINK
		WHERE
			i.link = @ps_id
		UNION ALL
		SELECT
			i.link
			, t.C_Name n_type
			, i.C_Name as n_name
			, s.F_Parent
		FROM ED_Network_Items i
		JOIN ES_Network_Items_Types t on i.F_Network_Items_Types = t.LINK
		JOIN ED_Network_Struct s on s.F_Child = i.LINK
		JOIN Recursive r ON s.F_Parent = r.link

	)

	IF EXISTS(SELECT n_name FROM Recursive r WHERE n_name LIKE '%' + @u_name + '%' AND n_type = @u_type GROUP BY n_name HAVING COUNT(*) > 1)
	BEGIN
		SELECT CONCAT('Удали дубли по ', @u_type, ' ', @u_name)
		RETURN
	END

	SELECT
		link, n_type, n_name, F_Parent
	FROM Recursive r
	SELECT link, n_type, n_name, F_Parent
	FROM Recursive r
	WHERE
		n_name LIKE '%' + @u_name + '%'
		AND n_type = @u_type -- LIKE '%' + @u_type + '%'
END


В чем может быть причина?
...
Рейтинг: 0 / 0
30.09.2019, 10:41
    #39868963
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка синтаксиса создания процедуры?
Борис Гаркун,

вы пытаетесь угадать синтаксис TSQL?
...
Рейтинг: 0 / 0
30.09.2019, 10:51
    #39868972
iiyama
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка синтаксиса создания процедуры?
Борис Гаркун,

Материализуйте результат вашего cte хотябы в виде временной таблицы, а потом используйте в разных местах процедуры

PS. Вторым запросом к Recursive Вы вышли из зоны видимости
...
Рейтинг: 0 / 0
30.09.2019, 10:51
    #39868973
В чем ошибка синтаксиса создания процедуры?
TaPaK, вспоминаю, опираясь на логику :)
...
Рейтинг: 0 / 0
30.09.2019, 10:53
    #39868974
В чем ошибка синтаксиса создания процедуры?
iiyamaМатериализуйте результат вашего cte хотябы в виде временной таблицы, а потом используйте в разных местах процедуры
А зачем? Вроде и так работает
iiyamaPS. Вторым запросом к Recursive Вы вышли из зоны видимости
Это что значит, просветите, пожалуйста
...
Рейтинг: 0 / 0
30.09.2019, 11:03
    #39868984
iiyama
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка синтаксиса создания процедуры?
Борис Гаркун,

;with cte as (select getdate () as [now])
select * from cte
select * from cte
...
Рейтинг: 0 / 0
30.09.2019, 11:13
    #39868992
В чем ошибка синтаксиса создания процедуры?
iiyamaБорис Гаркун,

;with cte as (select getdate () as [now])
select * from cte
select * from cte
Спасибо. На мой взгляд у меня почти тоже самое, только вместо cte Recursive. Разве нет?
...
Рейтинг: 0 / 0
30.09.2019, 11:16
    #39868995
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка синтаксиса создания процедуры?
Борис ГаркунiiyamaМатериализуйте результат вашего cte хотябы в виде временной таблицы, а потом используйте в разных местах процедуры
А зачем? Вроде и так работает
iiyamaPS. Вторым запросом к Recursive Вы вышли из зоны видимости
Это что значит, просветите, пожалуйстаWITH ... - это необязательная часть команд SELECT, DELETE, INSERT, UPDATE или MERGE.
А никакого не IF!
...
Рейтинг: 0 / 0
30.09.2019, 11:21
    #39869002
В чем ошибка синтаксиса создания процедуры?
iapWITH ... - это необязательная часть команд SELECT, DELETE, INSERT, UPDATE или MERGE.
А никакого не IF!
Спасибо. А то что я заканчиваю WITH ) этого не достаточно, чтобы не относить WITH к IF?
...
Рейтинг: 0 / 0
30.09.2019, 11:25
    #39869004
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка синтаксиса создания процедуры?
Борис Гаркун,

Достаточно открыть документацию и прочитать синтаксис с примерами. Нести чепуху со своими предположениями вовсе не обязательно.
...
Рейтинг: 0 / 0
30.09.2019, 11:47
    #39869018
iiyama
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка синтаксиса создания процедуры?
Борис Гаркун,


Код: 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.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
CREATE PROCEDURE bng_normalize_ps 
	@ps_id uniqueidentifier, 
	@u_name VARCHAR(50), 
	@u_type VARCHAR(50) 
AS
BEGIN

	WITH Recursive (link, n_type, n_name, F_Parent )
	AS
	(
		SELECT
			i.link
			, t.C_Name n_type
			, i.C_Name as n_name
			, s.F_Parent
			-- , s.F_Child
		FROM ED_Network_Items i
		JOIN ES_Network_Items_Types t on i.F_Network_Items_Types = t.LINK
		LEFT JOIN ED_Network_Struct s on s.F_Child = i.LINK
		WHERE
			i.link = @ps_id
		UNION ALL
		SELECT
			i.link
			, t.C_Name n_type
			, i.C_Name as n_name
			, s.F_Parent
		FROM ED_Network_Items i
		JOIN ES_Network_Items_Types t on i.F_Network_Items_Types = t.LINK
		JOIN ED_Network_Struct s on s.F_Child = i.LINK
		JOIN Recursive r ON s.F_Parent = r.link

	)
	
	select * 
	into #Recursive
	from [Recursive]

	IF EXISTS(SELECT n_name FROM #Recursive r WHERE n_name LIKE '%' + @u_name + '%' AND n_type = @u_type GROUP BY n_name HAVING COUNT(*) > 1)
	BEGIN
		SELECT CONCAT('Удали дубли по ', @u_type, ' ', @u_name)
		RETURN
	END

	SELECT
		link, n_type, n_name, F_Parent
	FROM #Recursive r
	SELECT link, n_type, n_name, F_Parent
	FROM #Recursive r
	WHERE
		n_name LIKE '%' + @u_name + '%'
		AND n_type = @u_type -- LIKE '%' + @u_type + '%'
END


...
Рейтинг: 0 / 0
30.09.2019, 11:51
    #39869021
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка синтаксиса создания процедуры?
iiyama,

страдалец, скорее свой селект хочет перед ретурном
...
Рейтинг: 0 / 0
30.09.2019, 12:07
    #39869036
В чем ошибка синтаксиса создания процедуры?
iiyama, спасибо за науку. Получается перед использованием IF надо обратиться хоть раз к рекурсии?
...
Рейтинг: 0 / 0
30.09.2019, 12:27
    #39869052
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка синтаксиса создания процедуры?
Борис Гаркунiiyama, спасибо за науку. Получается перед использованием IF надо обратиться хоть раз к рекурсии?

пуззле продолжается
...
Рейтинг: 0 / 0
30.09.2019, 12:36
    #39869058
В чем ошибка синтаксиса создания процедуры?
Вопрос был риторический :)
...
Рейтинг: 0 / 0
30.09.2019, 15:01
    #39869194
PsyMisha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка синтаксиса создания процедуры?
Борис Гаркун,

Я бы посоветовал результат выполнения CTE положить во временную таблицу, сформированную в теле той же процедуры.
Далее от CTE можно будет отвязаться, так как действительно есть нюансы использования табличных выражений, в плане когда, в каких конструкциях-условиях их необходимо использовать. У CTE немного непривычное время жизни, в отличие от традиционного понимания
...
Рейтинг: 0 / 0
30.09.2019, 15:07
    #39869202
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
В чем ошибка синтаксиса создания процедуры?
PsyMisha,

cte -- это такая же часть одного запроса, как секция from или where. Если это осознать, то желание писать другие стейтменты посреди конструкции запроса пропадет.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / В чем ошибка синтаксиса создания процедуры? / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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