CREATE FUNCTION [ schema_name. ] function_name ( [ { @parameter_name [ AS ][ type_schema_name. ] parameter_data_type [ = default ] [ READONLY ] } [ ,...n ] ] ) RETURNS return_data_type [ WITH <function_option> [ ,...n ] ] [ AS ] BEGIN function_body RETURN scalar_expression END [ ; ] --创建自定义函数 create function dbo.AAA(@m_str as nvarchar(80)) --参数 returns nvarchar(80) --返回值类型 as begin declare @i nvarchar(80) --声明变量 if @m_str='0' set @i='A' --赋值 if @m_str='1' set @i='B' return (@i) --返回i的值 end --调用自定义函数 declare @SmsContent varchar(500) --声明变量 set @SmsContent = '1' --赋值 select dbo.AAA(@SmsContent) --调用
//ADO执行 string str = (string)SQLHelper.ExecuteScalar("select dbo.AAA('0') ");
参数说明:
schema_name
用户定义函数所属的架构的名称。
function_name
用户定义函数的名称。函数名称必须符合有关标识符的规则,并且在数据库中以及对其架构来说是唯一的。
注意:
即使未指定参数,函数名称后也需要加上括号。
@ parameter_name
用户定义函数中的参数。可声明一个或多个参数。
一个函数最多可以有 2,100 个参数。执行函数时,如果未定义参数的默认值,则用户必须提供每个已声明参数的值。
通过将 at 符号 (@) 用作第一个字符来指定参数名称。参数名称必须符合有关标识符的规则。参数是对应于函数的局部参数;其他函数中可使用相同的参数名称。参数只能代替常量,而不能用于代替表名、列名或其他数据库对象的名称。
注意:
在传递存储过程或用户定义函数中的参数时,或在声明和设置批语句中的变量时,不会遵守 ANSI_WARNINGS。例如,如果将变量定义为 char(3) 类型,然后将其值设置为多于三个字符,则数据将截断为定义大小,并且 INSERT 或 UPDATE 语句可以成功执行。
[ type_schema_name. ] parameter_data_type
参数的数据类型及其所属的架构,后者为可选项。对于 Transact-SQL 函数,允许使用除 timestamp 数据类型之外的所有数据类型(包括 CLR 用户定义类型和用户定义表类型)。对于 CLR 函数,允许使用除 text、ntext、image、用户定义表类型和 timestamp 数据类型之外的所有数据类型(包括 CLR 用户定义类型)。不能将非标量类型 cursor 和 table 指定为 Transact-SQL 函数或 CLR 函数中的参数数据类型。
如果未指定 type_schema_name,则数据库引擎将按以下顺序查找 scalar_parameter_data_type:
包含 SQL Server 系统数据类型名称的架构。
[ = default ]
参数的默认值。如果定义了 default 值,则无需指定此参数的值即可执行函数。
注意:
可以为除 varchar(max) 和 varbinary(max) 数据类型之外的 CLR 函数指定默认的参数值。
如果函数的参数有默认值,则调用该函数以检索默认值时,必须指定关键字 DEFAULT。此行为与在存储过程中使用具有默认值的参数不同,在后一种情况下,不提供参数同样意味着使用默认值。
READONLY
指示不能函数定义中更新或修改参数。如果参数类型为用户定义的表类型,则应指定 READONLY。
return_data_type
标量用户定义函数的返回值。对于 Transact-SQL 函数,可以使用除 timestamp 数据类型之外的所有数据类型(包括 CLR 用户定义类型)。对于 CLR 函数,允许使用除 text、ntext、image 和 timestamp 数据类型之外的所有数据类型(包括 CLR 用户定义类型)。不能将非标量类型 cursor 和 table 指定为 Transact-SQL 函数或 CLR 函数中的返回数据类型。
function_body
指定一系列定义函数值的 Transact-SQL 语句,这些语句在一起使用不会产生负面影响(例如修改表)。function_body 仅用于标量函数和多语句表值函数。
在标量函数中,function_body 是一系列 Transact-SQL 语句,这些语句一起使用的计算结果为标量值。
在多语句表值函数中,function_body 是一系列 Transact-SQL 语句,这些语句将填充 TABLE 返回变量。
scalar_expression
指定标量函数返回的标量值。