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

Откуда:
Сообщений: 585
Всем привет!!!

Народ, подскажите как мне создать такую функцию, в которой будет цикл от 1 до 12, и проверяя несовпадение с параметром инсертишь в результирующую таблицу
10 июн 04, 20:12    [736168]     Ответить | Цитировать Сообщить модератору
 Re: Не могу создать функцию!!!  [new]
Палестинец
Member

Откуда:
Сообщений: 8314
функцию.... инсертишь в результирующую таблицу

Только наверно не функцию, а хранимую процедуру!??
10 июн 04, 20:31    [736199]     Ответить | Цитировать Сообщить модератору
 Re: Не могу создать функцию!!!  [new]
kika
Member

Откуда:
Сообщений: 585
Да, в процедуру!!!!
Плиз, подскажите как это сделать!!!
10 июн 04, 20:34    [736202]     Ответить | Цитировать Сообщить модератору
 Re: Не могу создать функцию!!!  [new]
kika
Member

Откуда:
Сообщений: 585
А как переменной присвоить набор данных от 1 до 12?
А затем исключить из этого набора число, которому равна входящая переменная?
10 июн 04, 20:50    [736218]     Ответить | Цитировать Сообщить модератору
 Re: Не могу создать функцию!!!  [new]
Палестинец
Member

Откуда:
Сообщений: 8314
Или все-таки табличную функцию ???

1.Создать процедуру /функцию
BOL->create procedure
BOL->create function
2.Чтоб был цикл от 1 до 12
declare @i int
set @i=1
while @i<=12
begin
...
set @i=@i+1
end
3. проверяя несовпадение с параметром
if @i<>@param
begin
..
end
4.инсертишь в результирующую таблицу
insert ...


зы.. сори - ну не телепат я :(
10 июн 04, 20:50    [736219]     Ответить | Цитировать Сообщить модератору
 Re: Не могу создать функцию!!!  [new]
Палестинец
Member

Откуда:
Сообщений: 8314
А как переменной присвоить набор данных от 1 до 12?
А затем исключить из этого набора число, которому равна входящая переменная?

declare @numbers table(val int)
insert @numbers
select 0 union all
select 1 union all
select 2 union all
select 3 union all
select 4 union all
select 5 union all
select 6 union all
select 7 union all
select 8 union all
select 9 union all
select 10 union all
select 11 union all
select 12

delete from @n where val=@param
10 июн 04, 20:52    [736221]     Ответить | Цитировать Сообщить модератору
 Re: Не могу создать функцию!!!  [new]
kika
Member

Откуда:
Сообщений: 585
Что тут не так:

CREATE FUNCTION [dbo].[GetOtherMonths] (@m int ) 
RETURNS @res TABLE (mname varchar(50)) 
AS  
BEGIN 
	declare @i int
	if @i=1 and @i<>@m BEGIN INSERT INTO @res (mname) VALUES ('sdfdsdf') END

	return 
	
END
10 июн 04, 21:13    [736243]     Ответить | Цитировать Сообщить модератору
 Re: Не могу создать функцию!!!  [new]
BugsBunny
Member

Откуда: GMT+5=EST
Сообщений: 2414
BOL::Control-of-Flow Language
10 июн 04, 21:15    [736245]     Ответить | Цитировать Сообщить модератору
 Re: Не могу создать функцию!!!  [new]
Палестинец
Member

Откуда:
Сообщений: 8314
все так..
написано:
declare @i int
if @i=1 and
@i у вас всегда NULL значит условие никогда не выполнится..
10 июн 04, 21:21    [736254]     Ответить | Цитировать Сообщить модератору
 Re: Не могу создать функцию!!!  [new]
kika
Member

Откуда:
Сообщений: 585
Пишет Invalid object name 'dbo.GetOtherM'.
Что это может значить?
10 июн 04, 21:29    [736267]     Ответить | Цитировать Сообщить модератору
 Re: Не могу создать функцию!!!  [new]
Dmitry S. Kravchenko
Member

Откуда:
Сообщений: 92
kika, а где же у тебя цикл-то?!
Надо так.

   SET @i = 1
   WHILE @i <= 12 BEGIN
      IF @i <> @m INSERT INTO ...
   END
10 июн 04, 21:35    [736271]     Ответить | Цитировать Сообщить модератору
 Re: Не могу создать функцию!!!  [new]
Dmitry S. Kravchenko
Member

Откуда:
Сообщений: 92
А, да, еще до END надо SET @i = @i + 1
10 июн 04, 21:37    [736272]     Ответить | Цитировать Сообщить модератору
 Re: Не могу создать функцию!!!  [new]
Палестинец
Member

Откуда:
Сообщений: 8314
CREATE FUNCTION [dbo].[GetOtherMonths]

Пишет Invalid object name 'dbo.GetOtherM'.
Что это может значить?


я вам один умный вещь скажу - только не обижайтесь ....
но пойму это значит - надо сходить прогуляться - развеятся :).
10 июн 04, 21:44    [736278]     Ответить | Цитировать Сообщить модератору
 Re: Не могу создать функцию!!!  [new]
kika
Member

Откуда:
Сообщений: 585
Dmitry S. Kravchenko
kika, а где же у тебя цикл-то?!
Надо так.

   SET @i = 1
   WHILE @i <= 12 BEGIN
      IF @i <> @m INSERT INTO ...
   END



Что-то я все равно не понимаю как мне сделать функцию, которая бы имела некий набор данный:
-порядковый номер (от 1 до 12)--- --- Месяц(January, Febrary и т.д.)---

И выводила названия всех месяцев, кроме того, порядковый номер которого равен номеру входящего параметра?!
11 июн 04, 11:15    [737076]     Ответить | Цитировать Сообщить модератору
 Re: Не могу создать функцию!!!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
CREATE FUNCTION dbo.Months (@number int)  
RETURNS @Table TABLE (MonthName varchar(12) NOT NULL) AS  
BEGIN 
  DECLARE @Counter int
  SET @Counter = 1
  WHILE @Counter <= 12 BEGIN
    IF @Counter <> @Number
      INSERT INTO @Table  SELECT DATENAME(mm, '2004' + RIGHT('00' + CAST(@Counter AS varchar(2)), 2) + '01')
    SET @Counter = @Counter + 1
  END
  RETURN
END
GO

SELECT 
  *
FROM
  dbo.Months(6)

ЗЫ. Дефолтный язык у логина должен быть русский.
11 июн 04, 11:41    [737192]     Ответить | Цитировать Сообщить модератору
 Re: Не могу создать функцию!!!  [new]
kika
Member

Откуда:
Сообщений: 585
Мне теперь пишет
Invalid object name 'dbo.Months'.
11 июн 04, 12:00    [737252]     Ответить | Цитировать Сообщить модератору
 Re: Не могу создать функцию!!!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Кто пишет? После чего? В той ли базе запрос на выборку выполняете, где функцию создали?
11 июн 04, 12:04    [737267]     Ответить | Цитировать Сообщить модератору
 Re: Не могу создать функцию!!!  [new]
kika
Member

Откуда:
Сообщений: 585
После того, как в процедуре вызываю dbo.Months (1)
выдает ошибку: Invalid object name 'dbo.Months'.
11 июн 04, 12:10    [737285]     Ответить | Цитировать Сообщить модератору
 Re: Не могу создать функцию!!!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Можно увидеть, как вы это вызываете? Функция у вас действительно с владельцем dbo создана?
11 июн 04, 12:13    [737294]     Ответить | Цитировать Сообщить модератору
 Re: Не могу создать функцию!!!  [new]
kika
Member

Откуда:
Сообщений: 585
pkarklin, спасибо тебе огромное!!!
Все получилось!!!

А как мне теперь еще добавить колонку с порядковым номером месяца?
Мне нужно будет прикреплять это значение к ссылке(будет входящий параметр)?
11 июн 04, 12:30    [737361]     Ответить | Цитировать Сообщить модератору
 Re: Не могу создать функцию!!!  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37100
автор
А как мне теперь еще добавить колонку с порядковым номером месяца?

alter FUNCTION dbo.Months (@number int)  
RETURNS @Table TABLE (id int identity(1,1),MonthName varchar(12) NOT NULL) AS  
BEGIN 
  DECLARE @Counter int
  SET @Counter = 1
  WHILE @Counter <= 12 BEGIN
    IF @Counter <> @Number
      INSERT INTO @Table(MonthName)  SELECT DATENAME(mm, '2004' + RIGHT('00' + CAST(@Counter AS varchar(2)), 2) + '01')
    SET @Counter = @Counter + 1
  END
  RETURN
END
GO

SELECT 
  *
FROM
  dbo.Months(6)
11 июн 04, 12:33    [737377]     Ответить | Цитировать Сообщить модератору
 Re: Не могу создать функцию!!!  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Если у вас в базе есть табличка с целыми числами от 1 до ..., то можно отказаться от цикла:

CREATE FUNCTION dbo.Monthes (@number int)  
RETURNS TABLE AS RETURN
SELECT 
  T1.colNumber AS MonthNumber,
  DATENAME(mm, '2004' + RIGHT('00' + CAST(T1.colNumber AS varchar(2)), 2) + '01') AS MonthName
FROM
  tblNumbers T1
WHERE
  T1.colNumber <= 12 AND
  T1.colNumber <> @number
11 июн 04, 12:38    [737400]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить