Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Не могу перевести процедуру из MSSQL в MySql / 9 сообщений из 9, страница 1 из 1
12.09.2016, 10:29
    #39307420
son456
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу перевести процедуру из MSSQL в MySql
Здравствуйте! Столкнулся с проблемой нужно перевести процедуру из 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
12.09.2016, 10:36
    #39307424
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу перевести процедуру из MSSQL в MySql
son456,

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

Описывайте словами что делает эта процедура.
...
Рейтинг: 0 / 0
12.09.2016, 10:54
    #39307433
son456
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу перевести процедуру из MSSQL в MySql
Получает оценки по классу и по предмету.
...
Рейтинг: 0 / 0
12.09.2016, 10:55
    #39307434
son456
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу перевести процедуру из MSSQL в MySql
MAIN_QUERY массив дней в месяце.
...
Рейтинг: 0 / 0
12.09.2016, 11:00
    #39307439
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.
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
12.09.2016, 11:02
    #39307442
son456
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу перевести процедуру из MSSQL в MySql
на этот селект не нужно обращать внимания
Код: 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
12.09.2016, 11:04
    #39307444
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу перевести процедуру из MSSQL в MySql
son456,

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


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