回答
不,沒有辦法做到這一點。
我建議你重新審視這個要求,因爲「讓蘋果看起來像橘子」通常很難做到,而且值得懷疑。
這不是「讓蘋果看起來像橘子」,函數重載是對不同數據類型進行類似操作的常見問題。這樣的恥辱T-SQL不支持它:( – matao 2011-05-24 05:57:51
我同意matao它是對象關係數據庫管理系統的最基本的功能之一 – 2011-11-09 19:21:21
你可以通過sql_variant,但它周圍有各種各樣的危險;你不能像使用OO語言和重載一樣使用強類型。
如果您需要在函數中查找基本類型,則可以使用SQL_VARIANT_PROPERTY
函數。
您可以在單個字符串中傳遞值數組並將其解析出using this techique by Erland Sommarskog。
創建一個varchar(max)
參數或功能的幾個,如果有必要,那麼在該字符串像您的參數值:
param1;param2;parma3;param4
或
param1:type;param2:type;param3:type
或
calltype|param1;param2;param3
等,你只受限於你的想象力......
使用鏈接中的技術來拆分這個數組,並使用程序邏輯根據需要使用這些值。
我一直都在重載函數,但我碰巧知道這些問題往往高度依賴於平臺。
在我們的DB2系統,我經常超負荷類似如下:
創建函數Schema1.F1(PARM日期) 返回日期 歸期+1個月;
CREATE Function Schema1.F1(parm timestamp) return date return date(timestamp)+ 1month;
當您有多個具有類似格式化要求的查詢時,這實際上非常有用。
到目前爲止,我發現的唯一問題是,最好確定要使用該函數,因爲標準拖放函數「schema」。「name」失敗,因爲它無法確定要刪除哪個函數。如果有人知道如何刪除重載的SQL函數,請告訴我!
我已經成功完成的一件事是以允許它處理空值的方式編寫函數,然後用空值代替您想要省略的參數調用它。
實施例:
create function ActiveUsers
(
@departmentId int,
@programId int
)
returns int
as
begin
declare @count int
select @count = count(*)
from users
where
departmentId = isnull(@departmentId, departmentId)
and programId = isnull(@programId, programId)
return @count
end
go
用途:
select ActiveUsers(1,3) -- users in department 1 and program 3
select ActiveUsers(null,3) -- all users in program 3, regardless of department
select ActiveUsers(null,null) -- all users
一個解決方案是利用所述sql_variant
數據類型。只要您爲兩個值使用相同的數據類型,此示例就可以工作。返回您發送的任何數據類型。
create function dbo.Greater(
@val1 sql_variant
,@val2 sql_variant
) returns sql_variant
as
begin
declare @rV sql_variant
set @rV = case when @val1 >= @val2 then @val1
else @val2 end
return @rV
end
go
- 1. tsql用戶定義的函數
- 2. 如何使用Fluent NHibernate映射Tsql用戶定義的函數?
- 3. SQL調用自定義函數 - TSQL
- 4. TSQL,用戶函數返回表的重命名列函數
- 5. 如何在Matlab中重載用戶定義的函數?
- 6. TSQL如何在用戶定義函數中輸出PRINT?
- 7. 用戶定義函數標記重複
- 8. 重載的函數歧義
- 9. 從用戶定義函數
- 10. XSLT用戶定義函數
- 11. 用戶自定義函數
- 12. MySQL:用戶定義函數
- 13. 用戶定義函數
- 14. 重載用於用戶定義類型
- 15. JFreeChart 2D函數繪製用戶定義的自定義函數
- 16. 調用SQL用戶定義函數中其他用戶定義函數
- 17. jQuery在加載時調用用戶定義的函數
- 18. 使用用戶定義的函數
- 19. 用戶自定義函數的用法
- 20. 調用用戶定義的C函數
- 21. 使用While循環重寫用戶定義的函數
- 22. 用戶定義的函數上無盡的「加載......」
- 23. 用戶定義的函數numpy的外
- 24. nodeJS的用戶定義的javascript函數
- 25. 在C++中使用相同的定義重載函數
- 26. 函數中的函數TSQL
- 27. 打印的用戶定義函數
- 28. 用戶定義函數的查詢JOOQ
- 29. 找不到用戶定義的函數
- 30. Vim中的用戶定義函數
只是爲了將此問題保留爲有效的重複目標,SQL Server 2008,2008 R2或2012中尚未解決此問題。實際上,唯一有過近親號程序的問題已被棄用。 – 2012-11-27 23:04:27