0
A
回答
1
的参数类型函数头中定义,因此它总是在函数中是相同的。当你传入一个与定义的类型参数类型不同的参数时,SQL Server会尽其所能为所定义的函数参数类型提供相应的参数。
我有一些功能,我想工作就像你以后一样。解决此问题的方法是将函数参数定义为varchar(x),然后在函数的传入参数中调用任何必需的CVONVERT()或格式时调用该参数。
CREATE FUNCTION dbo.QuoteValue
(
@InputStr varchar(8000) --value to format
)
RETURNS
varchar(8000)
AS
BEGIN
RETURN COALESCE(''''[email protected]+'''','null')
END
GO
DECLARE @DateValue datetime
SET @DateValue=GETDATE()
PRINT '@DateValue='+dbo.QuoteValue(@DateValue)
PRINT '@DateValue='+dbo.QuoteValue(CONVERT(varchar,@DateValue,121))
取决于你是什么后,如果您想日期或数字的工作,使函数参数VARCHAR(x)和函数使用中:
- ISDATE(表达) - 如果输入表达式是有效日期,则ISDATE返回1;否则,它返回0.下表显示了一系列示例的返回值。
- ISNUMERIC(Transact-SQL) - 当输入表达式求值为有效整数,浮点数,金额或小数类型时,ISNUMERIC返回1;否则返回0.返回值为1表示可以将表达式转换为至少一种数字类型。
这里是如何处理日期的例子...
CREATE FUNCTION dbo.DateXYZ
(
@InputStr varchar(50) --date value manipulate
)
RETURNS
datetime
AS
BEGIN
DECLARE @DateValue datetime
IF ISDATE(@InputStr)=1
BEGIN
SET @[email protected]
--do some datetime manipulation here
END
RETURN @DateValue --will return null if not given a valid date
END
GO
如下您可以使用它:
DECLARE @X varchar(50)
DECLARE @Y varchar(50)
DECLARE @BadDate datetime
DECLARE @GoodDate datetime
SET @X='bad date!!'
SET @Y='1/1/2009'
SET @BadDate=dbo.DateXYZ(@X)
SET @GoodDate=dbo.DateXYZ(@Y)
SELECT @BadDate,@GoodDate
你也可以传递一个参数来表示你正在通过:
CREATE FUNCTION dbo.AnyType
(
@InputStr varchar(8000) --general purpose value
,@Type char(1) --"I"nt, "F"loat, "D"atetime, "S"tring, etc...
)
RETURNS
varchar(8000)
AS
BEGIN
DECLARE @ReturnValue varchar(8000)
IF @Type='I' --int
BEGIN
DECLARE @IntValue int
SET @[email protected]
--do some int manipulation here
SET @[email protected]
END
ELSE IF @Type='F' --float
BEGIN
DECLARE @FloatValue float
SET @[email protected]
--do some float manipulation here
SET @[email protected]
END
ELSE IF @Type='D' --datetime
BEGIN
DECLARE @DatetimeValue datetime
SET @[email protected]
--do some datetime manipulation here
SET @ReturnValue=CONVERT(varchar(23),@DatetimeValue,121)
END
--etc...
--etc...
RETURN @ReturnValue
END
GO
函数只能返回一个固定类型,使其为varchar(x),并让调用者将其分配给适当数据类型的变量,或根据需要在结果集中对其进行CAST。
0
CREATE FUNCTION
dbo.MyFunction(@Param1 VARCHAR(50), @Param2 INT, @Param3 UNIQUEIDENTIFIER)
RETURNS
INT
当然,你可以为你的函数参数定义一个类型 - 但我想这不是你真正想问什么,对吧?请澄清!
马克
相关问题
- 1. Scala传递类类型作为参数
- 2. 传递了两个泛型类型作为函数参数
- 3. 传递一个类型的函数作为参数在DART
- 4. 传递BLOB/CLOB作为参数传递给PL/SQL函数
- 5. PHP:传递资源数据类型作为参数传递给函数
- 6. 如何将结构类型作为参数传递给函数?
- 7. Castle Windsor - 传递类型作为构造函数参数
- 8. 通行证类型作为参数传递给函数
- 9. 如何传递类型(例如String)作为函数参数?
- 10. 传递类对象作为参数传递给函数
- 11. 传递一个类的成员函数作为函数参数
- 12. 传递类作为参数
- 13. 传递$作为函数参数(jQuery的)
- 14. 的Xquery:传递函数作为参数
- 15. 传递id作为函数的参数
- 16. 传递函数数组作为参数
- 17. 传递函数的参数作为参数传递给另一个函数
- 18. 在函数中将类/实例函数作为参数传递
- 19. 使用扩展参数的类型传递作为泛型类型参数
- 20. Java:创建作为函数参数传递的泛型类型的实例
- 21. 传递函数作为参数
- 22. Bash:传递函数作为参数
- 23. lambda函数作为参数传递
- 24. 将va_list作为函数参数传递
- 25. 传递函数作为参数用Clojure
- 26. 传递函数作为参数
- 27. 传递const&作为函数参数
- 28. 将observableArray作为函数参数传递
- 29. 如何传递函数作为参数?
- 30. GLib HashTable传递函数作为参数
你可以通过添加你想要实现的例子来澄清吗? – 2009-06-25 10:25:12
它太糟糕了存储过程和函数没有像引用或argv和argc通过的东西.... – 2009-06-25 18:56:38