SQL中的函數能像VB6.0一樣,可以設置默認參數嗎?
比如:函數F_GetName有兩個參數,最后一個為默認參數,調用時能夠只傳一個參數嗎?即能夠select dbo.F_GetName( '00001 ')這樣調用嗎?
------解决方案--------------------
用户定义函数的参数。CREATE FUNCTION 语句中可以声明一个或多个参数。函数最多可以有 1,024 个参数。函数执行时每个已声明参数的值必须由用户指定,除非该参数的默认值已经定义。 如果函数的参数有默认值,在调用该函数时必须指定 "default "关键字才能获得默认值。这种行为不同于存储过程中有默认值的参数,在存储过程中省略参数也意味着使用默认值。
使用 @ 符号作为第一个字符来指定参数名称。参数名称必须符合标识符的规则。每个函数的参数仅用于该函数本身;相同的参数名称可以用在其它函数中。参数只能代替常量;而不能用于代替表名、列名或其它数据库对象的名称。
------解决方案--------------------
USE AdventureWorks;
GO
IF OBJECT_ID (N 'Sales.fn_SalesByStore ', N 'IF ') IS NOT NULL
DROP FUNCTION Sales.fn_SalesByStore;
GO
CREATE FUNCTION Sales.fn_SalesByStore (@storeid int = 676)
RETURNS TABLE
AS
RETURN
(
SELECT P.ProductID, P.Name, SUM(SD.LineTotal) AS 'YTD Total '
FROM Production.Product AS P
JOIN Sales.SalesOrderDetail AS SD ON SD.ProductID = P.ProductID
JOIN Sales.SalesOrderHeader AS SH ON SH.SalesOrderID = SD.SalesOrderID
WHERE SH.CustomerID = @storeid
GROUP BY P.ProductID, P.Name
);
GO
SELECT * FROM Sales.fn_SalesByStore (default);