2017-09-06 88 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)返回它

相关问题