我需要關於SQL Server 2012中用於檢查輸入值的函數的幫助。如果函數檢測到數字,則返回0,如果檢測字符返回1。在函數中傳遞值而不引用T-SQL/SQL Server 2012?
但是,對於通過引號和沒有引號的相同數字,我得到2個不同的結果。
select dbo.IS_ALIEN('56789')
返回0
select dbo.IS_ALIEN(56789)
返回1(我需要返回0)
這是我的函數:
ALTER FUNCTION [dbo].[IS_ALIEN]
(@alienNAIC CHAR(1))
RETURNS NUMERIC(10,0)
AS
BEGIN
DECLARE @nNum NUMERIC(1,0);
BEGIN
SET @NnUM = ISNUMERIC(@alienNAIC)
END
BEGIN
IF @nNum = 1
RETURN 0;
END
RETURN 1;
END
相同的概念爲:
select dbo.IS_ALIEN('AA-11990043')
返回1
或
select dbo.IS_ALIEN(NULL)
返回1(我需要它返回0)
我使用Oracle函數的引用(下面的代碼是剛剛從舊數據庫引用):
create or replace FUNCTION "IS_ALIEN"
( alienNAIC IN char)
RETURN NUMBER IS
nNum number;
BEGIN
SELECT MOD(alienNAIC, 2) into nNum FROM dual;
return 0;
EXCEPTION
WHEN INVALID_NUMBER THEN
return 1;
END;
但T-SQL函數不允許發生異常的異常。所以我儘量轉換得更接近。
提示:在管理工作室運行'SELECT CAST(56789 As CHAR(1))'並檢查結果。這是Sql Server甚至在任何代碼運行之前轉換爲參數類型的問題。這聽起來像你需要使用'sql_variant'類型來解決問題,這不是一件容易的事情。 –
ahh我得到一個星號(*) –
總是使用標籤指定服務器的版本。如果您使用的是2008及更高版本,則可以使用ISNUMERIC功能。順便說一句,當你將@alienNAIC char(1)定義爲參數時,它只需要輸入的第一個字符。 – FLICKER