powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не могу перевести процедуру из MSSQL в MySql
9 сообщений из 9, страница 1 из 1
Не могу перевести процедуру из MSSQL в MySql
    #39307420
son456
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Столкнулся с проблемой нужно перевести процедуру из MSSQL в MySql
Код: plsql
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.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
/****** Объект:  StoredProcedure [dbo].[GetMonthSubjectClassesMarks]    Дата сценария: 09/01/2009 22:27:02 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetMonthSubjectClassesMarks]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'CREATE PROCEDURE [dbo].[GetMonthSubjectClassesMarks]
(
	@className NVARCHAR(50),
	@subjectName NVARCHAR(50),
	@month Integer,
	@year Integer 
)

AS
DECLARE @MAIN_QUERY nvarchar(4000) 
Set @MAIN_QUERY=''[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]
from(
SELECT peopleName=(
					SELECT [name] FROM Peoples where [id]=people_ID),
					[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]
		FROM 
		(
			SELECT date_today,people_ID,mark=case when mark is null then CHAR(32) else cast(mark as varchar) end 
			FROM(
					SELECT 6*(we-1) + md AS date_today 
					FROM 
						(
							SELECT 1 we UNION ALL SELECT 2 UNION ALL SELECT 3 
							UNION ALL SELECT 4 UNION ALL SELECT 5 union all select 6
						) 
					temp1 CROSS JOIN
						(
							SELECT 1 md UNION ALL SELECT 2 UNION ALL SELECT 3 
							UNION ALL SELECT 4 UNION ALL SELECT 5 union all select 6
						)	
					temp2 WHERE 6*(we-1) + md <= 31)TempTab1 CROSS JOIN
						(
						SELECT peoples.[id] as people_ID from Peoples
						INNER JOIN Classes 
						ON Peoples.[classID]=Classes.[id] 
						AND Classes.[name]=''''''+cast(@className as varchar)+'''''')TempTab2
					LEFT JOIN
						(
							SELECT * from Marks inner join Subjects on Marks.subjectID=Subjects.[id]
							WHERE Subjects.[name]=''''''+cast(@subjectName as varchar)+'''''')TempTab3 
				 ON TempTab3.[peopleID]=TempTab2.people_ID and month([DateMark])=''+cast(@month as varchar)+'' and
				year([DateMark])=''+cast(@year as varchar)+'' and day([dateMark])=TempTab1.date_today)
		P PIVOT
		(
		max(mark)
		FOR date_today IN
		( [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] )
		) AS pvt)Q
		order by peopleName''

EXEC(''SELECT peopleName as [''+@subjectName+''], ''+@MAIN_QUERY)

' 
END
...
Рейтинг: 0 / 0
Не могу перевести процедуру из MSSQL в MySql
    #39307424
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
son456,

Я синтаксиса процедур MS SQL не знаю, но у меня есть стойкое ощущение, что напрямую процедура не переводится. Например, из-за упоминания sys.objects, коих в MySQL не существует.

Описывайте словами что делает эта процедура.
...
Рейтинг: 0 / 0
Не могу перевести процедуру из MSSQL в MySql
    #39307433
son456
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получает оценки по классу и по предмету.
...
Рейтинг: 0 / 0
Не могу перевести процедуру из MSSQL в MySql
    #39307434
son456
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MAIN_QUERY массив дней в месяце.
...
Рейтинг: 0 / 0
Не могу перевести процедуру из MSSQL в MySql
    #39307439
son456
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сам запрос:
Код: plsql
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.
Set @MAIN_QUERY=''[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]
from(
SELECT peopleName=(
					SELECT [name] FROM Peoples where [id]=people_ID),
					[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]
		FROM 
		(
			SELECT date_today,people_ID,mark=case when mark is null then CHAR(32) else cast(mark as varchar) end 
			FROM(
					SELECT 6*(we-1) + md AS date_today 
					FROM 
						(
							SELECT 1 we UNION ALL SELECT 2 UNION ALL SELECT 3 
							UNION ALL SELECT 4 UNION ALL SELECT 5 union all select 6
						) 
					temp1 CROSS JOIN
						(
							SELECT 1 md UNION ALL SELECT 2 UNION ALL SELECT 3 
							UNION ALL SELECT 4 UNION ALL SELECT 5 union all select 6
						)	
					temp2 WHERE 6*(we-1) + md <= 31)TempTab1 CROSS JOIN
						(
						SELECT peoples.[id] as people_ID from Peoples
						INNER JOIN Classes 
						ON Peoples.[classID]=Classes.[id] 
						AND Classes.[name]=''''''+cast(@className as varchar)+'''''')TempTab2
					LEFT JOIN
						(
							SELECT * from Marks inner join Subjects on Marks.subjectID=Subjects.[id]
							WHERE Subjects.[name]=''''''+cast(@subjectName as varchar)+'''''')TempTab3 
				 ON TempTab3.[peopleID]=TempTab2.people_ID and month([DateMark])=''+cast(@month as varchar)+'' and
				year([DateMark])=''+cast(@year as varchar)+'' and day([dateMark])=TempTab1.date_today)
		P PIVOT
		(
		max(mark)
		FOR date_today IN
		( [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] )
		) AS pvt)Q
		order by peopleName''

EXEC(''SELECT peopleName as [''+@subjectName+''], ''+@MAIN_QUERY)

' 
...
Рейтинг: 0 / 0
Не могу перевести процедуру из MSSQL в MySql
    #39307442
son456
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
на этот селект не нужно обращать внимания
Код: plsql
1.
2.
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetMonthSubjectClassesMarks]') AND type in (N'P', N'PC'))
BEGIN
...
Рейтинг: 0 / 0
Не могу перевести процедуру из MSSQL в MySql
    #39307444
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
son456,

Конструкции PIVOT в MySQL тоже нет. Чисел в квадратных скобках - тоже.
...
Рейтинг: 0 / 0
Не могу перевести процедуру из MSSQL в MySql
    #39307450
son456
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MAIN_QUERY (чила в квадратных скобках)массив дней в месяце. Можно перевести запрос до PIVOT
...
Рейтинг: 0 / 0
Не могу перевести процедуру из MSSQL в MySql
    #39307454
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
son456Можно перевести запрос до PIVOTНепонятно, что значит "до".
Массивов и PIVOT в MySQL нет. Остально переводится практически один в один.
Вместо WHERE в JOIN-ах нужно писать слово ON.
Вместо EXEC - Prepared Statements .
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не могу перевести процедуру из MSSQL в MySql
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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