Опять функции SCALAR

rtyts
Дата: 15.01.2009 19:11:06
Не компилируется :(
CREATE FUNCTION  [dbo].[fnc_get_from_DPPH_ID_Code](@ID_Code bigint, @DT datetime)
RETURNS bigint
WITH EXECUTE AS CALLER
AS
BEGIN
DECLARE @RV_ID_Code bigint
;WITH PPID(ID_Code) AS
(

SELECT MAX(ID_Code)
            FROM [DB_PowerReg].[dbo].[tbl_Day]
WHERE  DATEPART(dd,@DT)=day_server
                                 AND DATEPART(mm,@DT)=month_server
                                     AND DATEPART(yy,@DT)=year_server AND ID_Code<@ID_Code
)
SELECT ID_Code from PPID;


RETURN @RV_ID_Code
END
Как в @RV_ID_Code передать результат из SELECT ID_Code from PPID
SET @Ret_ID_Code = (SELECT ID_Code from PPID)
Вот так не хочет :(
locky
Дата: 15.01.2009 19:19:55
SELECT @Ret_ID_Code = MAX(ID_Code)
            FROM [DB_PowerReg].[dbo].[tbl_Day]
WHERE  DATEPART(dd,@DT)=day_server
                                 AND DATEPART(mm,@DT)=month_server
                                     AND DATEPART(yy,@DT)=year_server AND ID_Code<@ID_Code
??

-------------------------
There’s no silver bullet!
rtyts
Дата: 15.01.2009 19:26:10
8-)
Да просто изучаю эти общие табл выражения...
Код как пример, дык чего CTE в скаляре не применимо?
locky
Дата: 15.01.2009 19:27:42
rtyts
8-)
Да просто изучаю эти общие табл выражения...
Код как пример, дык чего CTE в скаляре не применимо?


применимо. надо внимательнее изучать синтаксис.

DECLARE @RV_ID_Code bigint
;WITH PPID(ID_Code) AS
(

SELECT MAX(ID_Code)
            FROM [DB_PowerReg].[dbo].[tbl_Day]
WHERE  DATEPART(dd,@DT)=day_server
                                 AND DATEPART(mm,@DT)=month_server
                                     AND DATEPART(yy,@DT)=year_server AND ID_Code<@ID_Code
)
SELECT @RV_ID_Code = ID_Code from PPID;


RETURN @RV_ID_Code
Ken@t
Дата: 15.01.2009 19:30:35
учебник возьмите в руки, всё как всегда, не надо синтаксис выдумывать
CREATE FUNCTION  [dbo].[fnc_get_from_DPPH_ID_Code](@ID_Code bigint, @DT datetime)
RETURNS bigint
WITH EXECUTE AS CALLER
AS
BEGIN
DECLARE @RV_ID_Code bigint
;WITH PPID(ID_Code) AS
(

SELECT MAX(ID_Code)
            FROM [DB_PowerReg].[dbo].[tbl_Day]
WHERE  DATEPART(dd,@DT)=day_server
                                 AND DATEPART(mm,@DT)=month_server
                                     AND DATEPART(yy,@DT)=year_server AND ID_Code<@ID_Code
)
SELECT @RV_ID_Code = ID_Code from PPID;


RETURN @RV_ID_Code
END