SQLServer中用sp_OACreate等一系列系統存儲過程可以調用服務器上的Com對象,因此可以通過調用COM使得T-SQL站在巨人的肩膀上,但這需要很高的權限。 比如下面的測試腳本示范了通過調用Javascript來實現用正則表達式驗證數據表中Email的功能,你如果用過系統函數中類似isdate,isnumeric之類的功能就會去努力嘗試用同樣方便的方法實現自己的特定驗證。
--如果SQL2005提示沒有權限則打開Ole Automation Procedures
--exec sp_configure 'show advanced options',1
--reconfigure
--exec sp_configure 'Ole Automation Procedures',1
--reconfigure
--測試email
create function isEmail(@value varchar(100))
returns bit
as
begin
declare @object int
declare @v bit
declare @str varchar(8000)
--Javascript的正則表達式定義和調用語句
set @str='var reg=/^w+[+.w-]*@([w-]+.)*w+[w-]*.([a-z]{2,3}|d+)$/i;reg.test("'+@value+'")'
--調用腳本組件來執行腳本
exec sp_OACreate 'MSScriptControl.ScriptControl',@object output
exec sp_OASetProperty @object, 'Language','Javascript'
exec sp_OAMethod @object, 'eval', @v out,@str
--銷毀com對象
exec sp_OADestroy @object
return @v
end
go
--測試函數
select * from(
select 'aa.bb.com' as email union
select '[email protected]' union
select 'aa.bb@com' union
select 'aa@bb@com' ) a
where dbo.isEmail(email)=1
go
--刪除測試環境
drop function isEmail
go
/*----------------輸出結果
email
---------
[email protected]
-----------------------*/
Com能夠實現的功能很多,有人會用sqlserver調用XMLhttp去獲取網頁數據,還有人用Office組件去做簡體和繁體的轉換,甚至可以自己開發Com組件,但那樣還不如去寫擴展存儲過程了。