創(chuàng)建自定義函數(shù):
站在用戶的角度思考問題,與客戶深入溝通,找到靜樂網(wǎng)站設(shè)計與靜樂網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名注冊、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋靜樂地區(qū)。
use 數(shù)據(jù)庫名
go
create function 函數(shù)名
(@pno int)
returns int
as
begin
declare @a int
if not exists(select * from person where pno=@pno)
set @a=-1
else
set @a=1
return @a
end
調(diào)用函數(shù):
use 數(shù)據(jù)庫名
go
select dbo.函數(shù)名(13250)
其語法如下:
RAISERROR ( { msg_id | msg_str | @local_variable }
{ ,severity ,state }
[ ,argument [ ,...n ] ]
)
[ WITH option [ ,...n ] ]
簡要說明一下:
第一個參數(shù):{ msg_id | msg_str | @local_variable }
msg_id:表示可以是一個sys.messages表中定義的消息代號;
使用 sp_addmessage 存儲在 sys.messages 目錄視圖中的用戶定義錯誤消息號。
用戶定義錯誤消息的錯誤號應(yīng)當(dāng)大于 50000。
msg_str:表示也可以是一個用戶定義消息,該錯誤消息最長可以有 2047 個字符;
(如果是常量,請使用N'xxxx',因為是nvarchar的)
當(dāng)指定 msg_str 時,RAISERROR 將引發(fā)一個錯誤號為 5000 的錯誤消息。
@local_variable:表示也可以是按照 msg_str 方式的格式化字符串變量。
第二個參數(shù):severity
用戶定義的與該消息關(guān)聯(lián)的嚴(yán)重級別。(這個很重要)
任何用戶都可以指定 0 到 18 之間的嚴(yán)重級別。
[0,10]的閉區(qū)間內(nèi),不會跳到catch;
如果是[11,19],則跳到catch;
如果[20,無窮),則直接終止數(shù)據(jù)庫連接;
第三個參數(shù):state
如果在多個位置引發(fā)相同的用戶定義錯誤,
則針對每個位置使用唯一的狀態(tài)號有助于找到引發(fā)錯誤的代碼段。
介于 1 至 127 之間的任意整數(shù)。(state 默認值為1)
當(dāng)state 值為 0 或大于 127 時會生成錯誤!
第四個參數(shù):argument
用于代替 msg_str 或?qū)?yīng)于 msg_id 的消息中的定義的變量的參數(shù)。
第五個參數(shù):option
錯誤的自定義選項,可以是下表中的任一值:
LOG :在錯誤日志和應(yīng)用程序日志中記錄錯誤;
NOWAIT:將消息立即發(fā)送給客戶端;
SETERROR:將 @@ERROR 值和 ERROR_NUMBER 值設(shè)置為 msg_id 或 50000;
[SQL]代碼示例
--示例1DECLARE @raiseErrorCode nvarchar(50)
SET @raiseErrorCode = CONVERT(nvarchar(50), YOUR UNIQUEIDENTIFIER KEY)
RAISERROR('%s INVALID ID. There is no record in table',16,1, @raiseErrorCode)
--示例2RAISERROR (
N'This is message %s %d.', -- Message text,
10, -- Severity,
1, -- State,
N'number', -- First argument.
5 -- Second argument.
);
-- The message text returned is: This is message number 5.
GO
--示例3RAISERROR (N'%*.*s', -- Message text.
10, -- Severity,
1, -- State,
7, -- First argument used for width.
3, -- Second argument used for precision.
N'abcde'); -- Third argument supplies the string.
-- The message text returned is: abc.
GO
--示例4RAISERROR (N'%7.3s', -- Message text.
10, -- Severity,
1, -- State,
N'abcde'); -- First argument supplies the string.
-- The message text returned is: abc.
GO
--示例5
--A. 從 CATCH 塊返回錯誤消息
以下代碼示例顯示如何在 TRY 塊中使用 RAISERROR 使執(zhí)行跳至關(guān)聯(lián)的 CATCH 塊中。
它還顯示如何使用 RAISERROR 返回有關(guān)調(diào)用 CATCH 塊的錯誤的信息。
BEGIN TRY
RAISERROR ('Error raised in TRY block.', -- Message text.
16, -- Severity.
1 -- State.
);
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
RAISERROR (@ErrorMessage, -- Message text.
@ErrorSeverity, -- Severity.
@ErrorState -- State.
);
END CATCH;
--示例6
--B. 在 sys.messages 中創(chuàng)建即席消息
以下示例顯示如何引發(fā) sys.messages 目錄視圖中存儲的消息。
該消息通過 sp_addmessage 系統(tǒng)存儲過程,以消息號50005添加到 sys.messages 目錄視圖中。
sp_addmessage @msgnum = 50005,
@severity = 10,
@msgtext = N'%7.3s';
GO
RAISERROR (50005, -- Message id.
10, -- Severity,
1, -- State,
N'abcde'); -- First argument supplies the string.
-- The message text returned is: abc.
GO
sp_dropmessage @msgnum = 50005;
GO
--示例7
--C. 使用局部變量提供消息文本
以下代碼示例顯示如何使用局部變量為 RAISERROR 語句提供消息文本。sp_addmessage @msgnum = 50005,
@severity = 10,
@msgtext = N'%7.3s';
GO
RAISERROR (50005, -- Message id.
10, -- Severity,
1, -- State,
N'abcde'); -- First argument supplies the string.
-- The message text returned is: abc.
GO
sp_dropmessage @msgnum = 50005;
GO
轉(zhuǎn)自博客園:
returns @RowSet table(
ID int identity(1,1) ,
score float,
lastScore float
)
你這里已經(jīng)聲明了一個表格類型變量作為函數(shù)的返回值.
那么只要在函數(shù)里對這個表進行賦值,就可以直接return
insert into @RowSet values(...)
return
--------
declare @ScoreList table (YScore float)
declare @ScoreList1 table (lastScore float)
-------------------------------------------
怎么我看你又聲明了兩個表格類型的變量?你函數(shù)聲明里的返回類型是表,那么單行返回的話就只能往里裝簡單類型的值.
如果你要union拼接兩個table一起返回的話,兩個內(nèi)部table和聲明的返回table定義又不一致.
很奇怪的寫法...能看出來你想干什么...但這種寫法很怪異.
========================================補充
insert into @ScoreList SELECT...
insert into @ScoreList1 SELECT ...
你這不是把兩個查詢的結(jié)果賦給兩個內(nèi)部變量了么,且這個表與你聲明的返回表都是一個float列.
你完全可以再把這兩個變量表insert 到@RowSet啊,或者不用這倆變量表,直接在兩個查詢里向@RowSet寫入值.
最后直接
return
end
不就行了?
======
這有個返回值為talble的函數(shù),你參看一下吧.你這個函數(shù)的完成度已經(jīng)相當(dāng)高了.
newid 無參數(shù)
返回一個GUID(全局唯一表示符)值
例如:select newid()
返回:2E6861EF-F4DB-4FFE-86EB-637482FE982J2
isnumeric (任意表達式)
判斷表達式是否為數(shù)值類型或者是否可以轉(zhuǎn)換成數(shù)值。
是:返回1,不是:返回0
例如:select isnumeric(1111) 返回 1
select isnumeric('123rr') 返回 0
select isnumeric('123') 返回 1
isnull (任意表達式1,任意表達式2)
如果任意表達式1不為NULL,則返回它的值;否則,在將任意表達式2的類型轉(zhuǎn)換為任意表達式1的類型(如果這兩個類型不同)后,返回任意表達式2的值。
例如:select isnull(null,N'沒有值') 返回 沒有值
select isnull(N'具體的值',N'沒有值') 返回 具體的值
isdate (任意表達式)
確定輸入表達式是否為有效日期或可轉(zhuǎn)成有效的日期;
是:返回1,不是:返回0
例如:select isdate(getdate()) 返回1
select isdate('2013-01-02') 返回1
select isdate('198') 返回0
文章標(biāo)題:sqlserver在函數(shù),sqlserver函數(shù)語法
網(wǎng)頁鏈接:http://chinadenli.net/article10/dsdgpgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、ChatGPT、搜索引擎優(yōu)化、網(wǎng)站建設(shè)、網(wǎng)站策劃、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)