存储过程会写吧?
如果会写就简单了,只是不能更新数据,且必须返回一个值。
在用户定义函数那里点右键就可以了
实例如下
CREATE FUNCTION f_GetUserName (@userID int)
RETURNS varchar(50) AS
BEGIN
declare @userName varchar(50)
select @userName = UserName
from SysUserBaseInfo
where PKID = @userID if @userName is null
begin
set @userName = ''
end return @userName
END
如果会写就简单了,只是不能更新数据,且必须返回一个值。
在用户定义函数那里点右键就可以了
实例如下
CREATE FUNCTION f_GetUserName (@userID int)
RETURNS varchar(50) AS
BEGIN
declare @userName varchar(50)
select @userName = UserName
from SysUserBaseInfo
where PKID = @userID if @userName is null
begin
set @userName = ''
end return @userName
END
创建用户定义函数,它是返回值的已保存的 Transact-SQL 例程。用户定义函数不能用于执行一组修改全局数据库状态的操作。与系统函数一样,用户定义函数可以从查询中唤醒调用。也可以像存储过程一样,通过 EXECUTE 语句执行。用户定义函数用 ALTER FUNCTION 修改,用 DROP FUNCTION 除去。语法
标量函数CREATE FUNCTION [ owner_name.] function_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] ) RETURNS scalar_return_data_type[ WITH < function_option> [ [,] ...n] ] [ AS ]BEGIN
function_body
RETURN scalar_expression
END
创建用户定义函数,它是返回值的已保存的 Transact-SQL 例程。用户定义函数不能用于执行一组修改全局数据库状态的操作。与系统函数一样,用户定义函数可以从查询中唤醒调用。也可以像存储过程一样,通过 EXECUTE 语句执行。用户定义函数用 ALTER FUNCTION 修改,用 DROP FUNCTION 除去。语法
标量函数CREATE FUNCTION [ owner_name.] function_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] ) RETURNS scalar_return_data_type[ WITH < function_option> [ [,] ...n] ] [ AS ]BEGIN
function_body
RETURN scalar_expression
END内嵌表值函数CREATE FUNCTION [ owner_name.] function_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] ) RETURNS TABLE [ WITH < function_option > [ [,] ...n ] ] [ AS ]RETURN [ ( ] select-stmt [ ) ]多语句表值函数CREATE FUNCTION [ owner_name.] function_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] ) RETURNS @return_variable TABLE < table_type_definition >[ WITH < function_option > [ [,] ...n ] ] [ AS ]BEGIN
function_body
RETURN
END< function_option > ::=
{ ENCRYPTION | SCHEMABINDING }< table_type_definition > ::=
( { column_definition | table_constraint } [ ,...n ] )
参数
A. 计算 ISO 周的标量值用户定义函数
下例中,用户定义函数 ISOweek 取日期参数并计算 ISO 周数。为了正确计算该函数,必须在调用该函数前唤醒调用 SET DATEFIRST 1。 CREATE FUNCTION ISOweek (@DATE datetime)
RETURNS int
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下面是函数调用。注意 DATEFIRST 设置为 1。SET DATEFIRST 1
SELECT master.dbo.ISOweek('12/26/1999') AS 'ISO Week'
下面是结果集。ISO Week
----------------
52B. 内嵌表值函数
下例返回内嵌表值函数。USE pubs
GO
CREATE FUNCTION SalesByStore (@storeid varchar(30))
RETURNS TABLE
AS
RETURN (SELECT title, qty
FROM sales s, titles t
WHERE s.stor_id = @storeid and
t.title_id = s.title_id)C. 多语句表值函数
假设有一个表代表如下的层次关系: CREATE TABLE employees (empid nchar(5) PRIMARY KEY,
empname nvarchar(50),
mgrid nchar(5) REFERENCES employees(empid),
title nvarchar(30)
)表值函数 fn_FindReports(InEmpID) 有一个给定的职员ID,它返回与所有直接或间接向给定职员报告的职员相对应的表。该逻辑无法在单个查询中表现出来,不过可以实现为用户定义函数。
returns int
begin
return 123end
select dbo.test()
RETURNS varchar
AS
BEGIN RETURN (SELECT YourName=@strName) ENDGOSELECT dbo.GetMyName('Echo')为何会只是显示 E
CREATE FUNCTION GetMyName(@strName as varchar(30))
RETURNS varchar(30) --没有定义长度,默认为1
AS
BEGIN RETURN (SELECT YourName=@strName) ENDGOSELECT dbo.GetMyName('Echo')
为何前面应该加 dbo.呢