2017-09-06 31 views
2

我正在創建一個函數並在我的小查詢中使用它。我之前沒有這樣做,我真的不知道這樣做。定義一個函數並在SQL查詢中使用它

它跟任何其他語言一樣嗎? 像

create function testFunction()... 
begin 
.. 
.. 
end 

,然後例如:

Select testFunction() 

,它應該工作?

CREATE FUNCTION dbo.ISOweek (@DATE datetime) 
RETURNS int 
WITH EXECUTE AS CALLER 
AS 
BEGIN 
    DECLARE @ISOweek int 
    SET @ISOweek= DATEPART(wk,@DATE)+1 
      -DATEPART(wk,CAST(DATEPART(yy,@DATE) as CHAR(4))+'0104') 
--Special cases: Jan 1-3 may belong to the previous year 
    IF (@ISOweek=0) 
      SET @ISOweek=dbo.ISOweek(CAST(DATEPART(yy,@DATE)-1 
       AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1 
--Special case: Dec 29-31 may belong to the next year 
    IF ((DATEPART(mm,@DATE)=12) AND 
      ((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28)) 
      SET @ISOweek=1 
    RETURN(@ISOweek) 
END; 
GO 
SET DATEFIRST 1 
SELECT dbo.ISOweek(CONVERT(DATETIME,'12/26/2004',101)) AS 'ISO Week' 
+0

您是否嘗試過尋找在SQL Server聯機叢書? – Raj

+0

我做到了!太多的例子,但沒有任何工作,所以我在這裏問。也許我錯過了一些東西.. –

+2

以及請顯示功能和你如何使用它,以及你得到了什麼錯誤(或者,如果沒有錯誤,什麼意外的行爲)。否則,我們不知道你做錯了什麼。 「不工作」不是問題描述。上面的例子是最基本的一點,不太可能是真正的問題。 – ADyson

回答

2

是的,SQL函數很容易創建。但您必須瞭解SQL中3種不同類型的函數:
1)標量函數:
- 返回單個值。
2)基於表格的函數:
- 返回一個表。
3)綜合功能:
返回一個單一的值(但函數循環通過窗口集)。
Creating Function with the MS SQL Server Client

有一些較大的參考用於開始創建SQL函數資源:

通過使用模板創建在MS SQL Server 2012的一個功能 用戶的示例定義標量函數(來自dotnettricks):

 --Create function to get emp full name 
     Create function fnGetEmpFullName 
     (
      @FirstName varchar(50), 
      @LastName varchar(50) 
     ) 
     returns varchar(101) 
     AS 
     BEGIN 
      return (Select @FirstName + ' '+ @LastName); 
     END 


微軟參考,說明和實施例在此link
0用戶定義的函數InformIT的文章在這個link2
終於從SQL球隊網站,介紹User Defined Functions

+0

大教程:-) – Sami

+0

完美!非常感謝。 –

1

這有點寬泛,你想返回一張表嗎? ?值。有很多不同的東西,一個function可以做,一個樣本的語法是:

CREATE FUNCTION Schema.FunctionName 
(
@InputValue InputValueDataType --Parameters here 
) 
RETURNS ReturnDataType -- The data type you want to return it 
AS 
BEGIN 
    -- Do some things with @InputValue 
END 

微軟文檔是HERE它解釋了不同的方式來做到這一點

那麼你可以只做SELECT * FROM schema.FunctionName (@InputValue)返回它

相關問題