powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / В чем ошибка синтаксиса создания процедуры?
25 сообщений из 25, страница 1 из 1
В чем ошибка синтаксиса создания процедуры?
    #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
В чем ошибка синтаксиса создания процедуры?
    #39868043
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Борис Гаркун,

ну хелп откройте для приличия хоть, или быстрее тему создавать
...
Рейтинг: 0 / 0
В чем ошибка синтаксиса создания процедуры?
    #39868049
кажется понял, без скобок и с @. Спасибо. Наткнулся видимо на синтаксис другой БД
...
Рейтинг: 0 / 0
В чем ошибка синтаксиса создания процедуры?
    #39868051
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Борис Гаркункажется понял, без скобок и с @. Спасибо. Наткнулся видимо на синтаксис другой БД
очень хотелось создать функцию, а получилось что-то
...
Рейтинг: 0 / 0
В чем ошибка синтаксиса создания процедуры?
    #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
В чем ошибка синтаксиса создания процедуры?
    #39868169
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
В чем ошибка синтаксиса создания процедуры?
    #39868380
Фотография PsyMisha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Борис Гаркун,

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

Почитайте хелп, ей-богу! Банальный же совершенно вопрос
...
Рейтинг: 0 / 0
В чем ошибка синтаксиса создания процедуры?
    #39868955
Всем спасибо, заработала
...
Рейтинг: 0 / 0
В чем ошибка синтаксиса создания процедуры?
    #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
В чем ошибка синтаксиса создания процедуры?
    #39868963
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Борис Гаркун,

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

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

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

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

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

Достаточно открыть документацию и прочитать синтаксис с примерами. Нести чепуху со своими предположениями вовсе не обязательно.
...
Рейтинг: 0 / 0
В чем ошибка синтаксиса создания процедуры?
    #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
В чем ошибка синтаксиса создания процедуры?
    #39869021
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iiyama,

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

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

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

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


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