Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 не работает процедура  [new]
blackbanny
Member

Откуда:
Сообщений: 97
Доброго времени суток!
пишу процедуру в SQL Server 2008:
CREATE PROCEDURE Распределение_заработка_авторов
@Начало_периода as date,
@Конец_периода as date as
DECLARE @i int
SET @i = 16
WHILE @i>0
BEGIN
SELECT
(SELECT
CAST (SUM (dbo.Стоимость.[Авторский гонорар]+(dbo.Стоимость.[Стоимость доп.страницы]*dbo.Заказ.[Количество доп.страниц])) AS MONEY)
FROM
dbo.Автор,
dbo.Заказ,
dbo.Стоимость,
dbo.Тип_работы,
dbo.Договор
WHERE
dbo.Автор.[Код автора]=dbo.Заказ.[Код автора] and
dbo.Заказ.[Код типа]=dbo.Тип_работы.[Код типа] and
dbo.Договор.[Номер договора]=dbo.Заказ.[Номер договора] and
dbo.Стоимость.[Код типа]=dbo.Тип_работы.[Код типа] and
dbo.Автор.[Код автора]=@i) as 'Заработок_автора',
dbo.Автор.[Код автора] as 'Код_автора',
dbo.Автор.Фамилия+dbo.Автор.Имя+dbo.Автор.Отчество as 'ФИО_автора'
FROM
dbo.Автор,
dbo.Заказ,
dbo.Стоимость,
dbo.Тип_работы,
dbo.Договор
WHERE
dbo.Автор.[Код автора]=dbo.Заказ.[Код автора] and
dbo.Заказ.[Код типа]=dbo.Тип_работы.[Код типа] and
dbo.Договор.[Номер договора]=dbo.Заказ.[Номер договора] and
dbo.Стоимость.[Код типа]=dbo.Тип_работы.[Код типа] and
dbo.Автор.[Код автора]=@i and
dbo.Договор.[Дата выдачи заказа] between @Начало_периода and @Конец_периода
ORDER BY MONEY DESC
SET @i=@i-1
END

выдает следующие ошибки:
Столбец "dbo.Автор.Фамилия" недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.
Столбец "dbo.Автор.Имя" недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.
Столбец "dbo.Автор.Отчество" недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.
23.09.12 20:19:20
Не удалось привязать составной идентификатор "Заработок_автора.MONEY".
23 сен 12, 18:23    [13209493]     Ответить | Цитировать Сообщить модератору
 Re: не работает процедура  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
blackbanny,

Думаю, вы запускаете не ту процедуру, которую показали.

Вы хоть имя владельца ставьте для процедуры.
23 сен 12, 18:31    [13209522]     Ответить | Цитировать Сообщить модератору
 Re: не работает процедура  [new]
blackbanny
Member

Откуда:
Сообщений: 97
alexeyvg, переделал процедуру:
CREATE PROCEDURE Распределение_заработка_авторов
@Начало_периода as date,
@Конец_периода as date as
DECLARE @i int
SET @i = 16
WHILE @i>0
BEGIN
SELECT
(SELECT
CAST (SUM (dbo.Стоимость.[Авторский гонорар]+(dbo.Стоимость.[Стоимость доп.страницы]*dbo.Заказ.[Количество доп.страниц])) AS MONEY)
FROM
dbo.Автор,
dbo.Заказ,
dbo.Стоимость,
dbo.Тип_работы,
dbo.Договор
WHERE
dbo.Автор.[Код автора]=dbo.Заказ.[Код автора] and
dbo.Заказ.[Код типа]=dbo.Тип_работы.[Код типа] and
dbo.Договор.[Номер договора]=dbo.Заказ.[Номер договора] and
dbo.Стоимость.[Код типа]=dbo.Тип_работы.[Код типа] and
dbo.Автор.[Код автора]=@i) as 'Заработок_автора',
dbo.Автор.Фамилия+dbo.Автор.Имя+dbo.Автор.Отчество as 'ФИО_автора'
FROM
dbo.Автор,
dbo.Заказ,
dbo.Стоимость,
dbo.Тип_работы,
dbo.Договор
WHERE
dbo.Автор.[Код автора]=dbo.Заказ.[Код автора] and
dbo.Заказ.[Код типа]=dbo.Тип_работы.[Код типа] and
dbo.Договор.[Номер договора]=dbo.Заказ.[Номер договора] and
dbo.Стоимость.[Код типа]=dbo.Тип_работы.[Код типа] and
dbo.Автор.[Код автора]=@i and
dbo.Договор.[Дата выдачи заказа] between @Начало_периода and @Конец_периода
GROUP BY dbo.Автор.Фамилия, dbo.Автор.Имя, Автор.Отчество
HAVING 'Заработок_автора'>0
ORDER BY 'Заработок_автора' DESC
END

выполняется успешно, но потом ошибка:
Ошибка преобразования значения varchar "Заработок_автора" в тип данных int.
23 сен 12, 18:49    [13209587]     Ответить | Цитировать Сообщить модератору
 Re: не работает процедура  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
blackbanny
Ошибка преобразования значения varchar "Заработок_автора" в тип данных int.
Не надо писать имена полей в одинарных кавычках. Используйте [].
23 сен 12, 19:07    [13209678]     Ответить | Цитировать Сообщить модератору
 Re: не работает процедура  [new]
hex.style
Member

Откуда:
Сообщений: 64
Попробуй CAST(... AS decimal(10,5))
23 сен 12, 19:14    [13209708]     Ответить | Цитировать Сообщить модератору
 Re: не работает процедура  [new]
hex.style
Member

Откуда:
Сообщений: 64
alexeyvg
blackbanny
Ошибка преобразования значения varchar "Заработок_автора" в тип данных int.
Не надо писать имена полей в одинарных кавычках. Используйте [].

XD Точно!
23 сен 12, 19:15    [13209713]     Ответить | Цитировать Сообщить модератору
 Re: не работает процедура  [new]
blackbanny
Member

Откуда:
Сообщений: 97
hex.style, т.е. написать [Заработок_автора] ?
23 сен 12, 19:43    [13209770]     Ответить | Цитировать Сообщить модератору
 Re: не работает процедура  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
blackbanny
hex.style, т.е. написать [Заработок_автора] ?
Везде, где вы пишите имя поля в кавычках, напишите его в квадратных скобках.
23 сен 12, 20:10    [13209834]     Ответить | Цитировать Сообщить модератору
 Re: не работает процедура  [new]
blackbanny
Member

Откуда:
Сообщений: 97
alexeyvg, не работает
а как еще в int можно было переобраховать
23 сен 12, 20:23    [13209863]     Ответить | Цитировать Сообщить модератору
 Re: не работает процедура  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
blackbanny
alexeyvg, не работает
а как еще в int можно было переобраховать
Ага, то есть сиквел пишет ошибку "не работаю"?

Строку "Заработок_автора" в целое число преобразовать не получится.
23 сен 12, 21:49    [13210072]     Ответить | Цитировать Сообщить модератору
 Re: не работает процедура  [new]
blackbanny
Member

Откуда:
Сообщений: 97
alexeyvg
Строку "Заработок_автора" в целое число преобразовать не получится.

а что тогда с запросом сделать?
24 сен 12, 09:03    [13210744]     Ответить | Цитировать Сообщить модератору
 Re: не работает процедура  [new]
qwerty112
Guest
blackbanny
alexeyvg
Строку "Заработок_автора" в целое число преобразовать не получится.

а что тогда с запросом сделать?

удалить нафик, и полить святой водой место где он был
купить книшку, и почитать про join-ы
24 сен 12, 09:18    [13210793]     Ответить | Цитировать Сообщить модератору
 Re: не работает процедура  [new]
aleks2
Guest
qwerty112
и полить святой водой место где он был

Компутеры - порождения дъявола. От святой воды помирают.
24 сен 12, 09:22    [13210811]     Ответить | Цитировать Сообщить модератору
 Re: не работает процедура  [new]
blackbanny
Member

Откуда:
Сообщений: 97
qwerty112
blackbanny
пропущено...

а что тогда с запросом сделать?

удалить нафик, и полить святой водой место где он был
купить книшку, и почитать про join-ы

т.е. с этим запросом ничего не сделать? просто я не знаю как явно превести в int :(
24 сен 12, 09:47    [13210918]     Ответить | Цитировать Сообщить модератору
 Re: не работает процедура  [new]
Glory
Member

Откуда:
Сообщений: 104751
blackbanny
просто я не знаю как явно превести в int

А вы уверены, что все ваши значения можно перевести в int ?
24 сен 12, 09:54    [13210955]     Ответить | Цитировать Сообщить модератору
 Re: не работает процедура  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
blackbanny
alexeyvg
Строку "Заработок_автора" в целое число преобразовать не получится.

а что тогда с запросом сделать?
Написать запрос без ошибок.

Если хотите, чтоб вам помогли, приведите текст запроса и сообщение об ошибке.

А то вы там чего то понаписали, а сервер сказал "не работаю". Может, он просто выключен?
24 сен 12, 12:05    [13211907]     Ответить | Цитировать Сообщить модератору
 Re: не работает процедура  [new]
blackbanny
Member

Откуда:
Сообщений: 97
alexeyvg
А то вы там чего то понаписали, а сервер сказал "не работаю". Может, он просто выключен?

я же написал:
CREATE PROCEDURE Распределение_заработка_авторов
@Начало_периода as date,
@Конец_периода as date as
DECLARE @i int
SET @i = 16
WHILE @i>0
BEGIN
SELECT
(SELECT
CAST (SUM (dbo.Стоимость.[Авторский гонорар]+(dbo.Стоимость.[Стоимость доп.страницы]*dbo.Заказ.[Количество доп.страниц])) AS MONEY)
FROM
dbo.Автор,
dbo.Заказ,
dbo.Стоимость,
dbo.Тип_работы,
dbo.Договор
WHERE
dbo.Автор.[Код автора]=dbo.Заказ.[Код автора] and
dbo.Заказ.[Код типа]=dbo.Тип_работы.[Код типа] and
dbo.Договор.[Номер договора]=dbo.Заказ.[Номер договора] and
dbo.Стоимость.[Код типа]=dbo.Тип_работы.[Код типа] and
dbo.Автор.[Код автора]=@i) as 'Заработок_автора',
dbo.Автор.Фамилия+dbo.Автор.Имя+dbo.Автор.Отчество as 'ФИО_автора'
FROM
dbo.Автор,
dbo.Заказ,
dbo.Стоимость,
dbo.Тип_работы,
dbo.Договор
WHERE
dbo.Автор.[Код автора]=dbo.Заказ.[Код автора] and
dbo.Заказ.[Код типа]=dbo.Тип_работы.[Код типа] and
dbo.Договор.[Номер договора]=dbo.Заказ.[Номер договора] and
dbo.Стоимость.[Код типа]=dbo.Тип_работы.[Код типа] and
dbo.Автор.[Код автора]=@i and
dbo.Договор.[Дата выдачи заказа] between @Начало_периода and @Конец_периода
GROUP BY dbo.Автор.Фамилия, dbo.Автор.Имя, Автор.Отчество
HAVING 'Заработок_автора'>0
ORDER BY 'Заработок_автора' DESC
END

выполняется успешно, но потом ошибка:
Ошибка преобразования значения varchar "Заработок_автора" в тип данных int.
24 сен 12, 15:56    [13213652]     Ответить | Цитировать Сообщить модератору
 Re: не работает процедура  [new]
Glory
Member

Откуда:
Сообщений: 104751
blackbanny
HAVING 'Заработок_автора'>0

Это что за синтакис такой ?
24 сен 12, 15:58    [13213669]     Ответить | Цитировать Сообщить модератору
 Re: не работает процедура  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31956
blackbanny
я же написал:
Я жк вам после этого ответил:
13209834

Вы написали "всё равно не работает", при этом ничего не поменяли.
24 сен 12, 15:58    [13213675]     Ответить | Цитировать Сообщить модератору
 Re: не работает процедура  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
CREATE PROCEDURE Распределение_заработка_авторов
@Начало_периода as date,
@Конец_периода as date as
DECLARE @i int
SET @i = 16
WHILE @i>0
BEGIN
SELECT 
(SELECT 
CAST (SUM (dbo.Стоимость.[Авторский гонорар]+(dbo.Стоимость.[Стоимость доп.страницы]*dbo.Заказ.[Количество доп.страниц])) AS MONEY)
FROM
dbo.Автор,
dbo.Заказ,
dbo.Стоимость,
dbo.Тип_работы,
dbo.Договор
WHERE
dbo.Автор.[Код автора]=dbo.Заказ.[Код автора] and
dbo.Заказ.[Код типа]=dbo.Тип_работы.[Код типа] and
dbo.Договор.[Номер договора]=dbo.Заказ.[Номер договора] and
dbo.Стоимость.[Код типа]=dbo.Тип_работы.[Код типа] and

--далее непонятная абракадабра

dbo.Автор.[Код автора]=@i) as 'Заработок_автора',
dbo.Автор.Фамилия+dbo.Автор.Имя+dbo.Автор.Отчество as 'ФИО_автора'
FROM
dbo.Автор,
dbo.Заказ,
dbo.Стоимость,
dbo.Тип_работы,
dbo.Договор
WHERE
dbo.Автор.[Код автора]=dbo.Заказ.[Код автора] and
dbo.Заказ.[Код типа]=dbo.Тип_работы.[Код типа] and
dbo.Договор.[Номер договора]=dbo.Заказ.[Номер договора] and
dbo.Стоимость.[Код типа]=dbo.Тип_работы.[Код типа] and
dbo.Автор.[Код автора]=@i and
dbo.Договор.[Дата выдачи заказа] between @Начало_периода and @Конец_периода
GROUP BY dbo.Автор.Фамилия, dbo.Автор.Имя, Автор.Отчество
HAVING 'Заработок_автора'>0
ORDER BY 'Заработок_автора' DESC



END


ТС, у вас там что-то не то с синтаксисом или вы скопировали криво
24 сен 12, 16:17    [13213818]     Ответить | Цитировать Сообщить модератору
 Re: не работает процедура  [new]
blackbanny
Member

Откуда:
Сообщений: 97
alexeyvg, исправил:
CREATE PROCEDURE Распределение_заработка_авторов
@Начало_периода as date,
@Конец_периода as date as
DECLARE @i int
SET @i = 16
WHILE @i>0
BEGIN
SELECT
(SELECT
CAST (SUM (dbo.Стоимость.[Авторский гонорар]+(dbo.Стоимость.[Стоимость доп.страницы]*dbo.Заказ.[Количество доп.страниц])) AS MONEY)
FROM
dbo.Автор,
dbo.Заказ,
dbo.Стоимость,
dbo.Тип_работы,
dbo.Договор
WHERE
dbo.Автор.[Код автора]=dbo.Заказ.[Код автора] and
dbo.Заказ.[Код типа]=dbo.Тип_работы.[Код типа] and
dbo.Договор.[Номер договора]=dbo.Заказ.[Номер договора] and
dbo.Стоимость.[Код типа]=dbo.Тип_работы.[Код типа] and
dbo.Автор.[Код автора]=@i) as [Заработок_автора],
dbo.Автор.Фамилия+dbo.Автор.Имя+dbo.Автор.Отчество as 'ФИО_автора'
FROM
dbo.Автор,
dbo.Заказ,
dbo.Стоимость,
dbo.Тип_работы,
dbo.Договор
WHERE
dbo.Автор.[Код автора]=dbo.Заказ.[Код автора] and
dbo.Заказ.[Код типа]=dbo.Тип_работы.[Код типа] and
dbo.Договор.[Номер договора]=dbo.Заказ.[Номер договора] and
dbo.Стоимость.[Код типа]=dbo.Тип_работы.[Код типа] and
dbo.Автор.[Код автора]=@i and
dbo.Договор.[Дата выдачи заказа] between @Начало_периода and @Конец_периода
GROUP BY dbo.Автор.Фамилия, dbo.Автор.Имя, Автор.Отчество
HAVING [Заработок_автора]>0
ORDER BY [Заработок_автора] DESC
END

тогда ошибка такая:
Недопустимое имя столбца "Заработок_автора".
24 сен 12, 16:31    [13213928]     Ответить | Цитировать Сообщить модератору
 Re: не работает процедура  [new]
Glory
Member

Откуда:
Сообщений: 104751
blackbanny
тогда ошибка такая:
Недопустимое имя столбца "Заработок_автора".

Конечно.
Объявлять и использовать вычисляемое поле в одном запросе нельзя
By desig
24 сен 12, 16:32    [13213945]     Ответить | Цитировать Сообщить модератору
 Re: не работает процедура  [new]
blackbanny
Member

Откуда:
Сообщений: 97
Konst_One
CREATE PROCEDURE Распределение_заработка_авторов
@Начало_периода as date,
@Конец_периода as date as
DECLARE @i int
SET @i = 16
WHILE @i>0
BEGIN
SELECT 
(SELECT 
CAST (SUM (dbo.Стоимость.[Авторский гонорар]+(dbo.Стоимость.[Стоимость доп.страницы]*dbo.Заказ.[Количество доп.страниц])) AS MONEY)
FROM
dbo.Автор,
dbo.Заказ,
dbo.Стоимость,
dbo.Тип_работы,
dbo.Договор
WHERE
dbo.Автор.[Код автора]=dbo.Заказ.[Код автора] and
dbo.Заказ.[Код типа]=dbo.Тип_работы.[Код типа] and
dbo.Договор.[Номер договора]=dbo.Заказ.[Номер договора] and
dbo.Стоимость.[Код типа]=dbo.Тип_работы.[Код типа] and

--далее непонятная абракадабра

dbo.Автор.[Код автора]=@i) as 'Заработок_автора',
dbo.Автор.Фамилия+dbo.Автор.Имя+dbo.Автор.Отчество as 'ФИО_автора'
FROM
dbo.Автор,
dbo.Заказ,
dbo.Стоимость,
dbo.Тип_работы,
dbo.Договор
WHERE
dbo.Автор.[Код автора]=dbo.Заказ.[Код автора] and
dbo.Заказ.[Код типа]=dbo.Тип_работы.[Код типа] and
dbo.Договор.[Номер договора]=dbo.Заказ.[Номер договора] and
dbo.Стоимость.[Код типа]=dbo.Тип_работы.[Код типа] and
dbo.Автор.[Код автора]=@i and
dbo.Договор.[Дата выдачи заказа] between @Начало_периода and @Конец_периода
GROUP BY dbo.Автор.Фамилия, dbo.Автор.Имя, Автор.Отчество
HAVING 'Заработок_автора'>0
ORDER BY 'Заработок_автора' DESC



END


ТС, у вас там что-то не то с синтаксисом или вы скопировали криво

что значит абракадабра? что имеено смущает?
24 сен 12, 16:32    [13213946]     Ответить | Цитировать Сообщить модератору
 Re: не работает процедура  [new]
blackbanny
Member

Откуда:
Сообщений: 97
Glory
blackbanny
тогда ошибка такая:
Недопустимое имя столбца "Заработок_автора".

Конечно.
Объявлять и использовать вычисляемое поле в одном запросе нельзя
By desig

а как тогда в HAVING исключить записи у которых сумма = 0 ?
24 сен 12, 16:34    [13213957]     Ответить | Цитировать Сообщить модератору
 Re: не работает процедура  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
всё смущает:
- почему в WHERE вдруг появились алиасы
- FROM лишний и тд и тп
24 сен 12, 16:34    [13213961]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить