当前位置: 首页 > 科技观察

数据库:分享四个实用的SQLServer脚本函数,欢迎收藏

时间:2023-03-20 14:18:38 科技观察

今天给大家分享四个在实际开发中比较实用的SQLServer脚本函数。希望对您有所帮助!1.指定字符串分列list--指定字符串分列listCREATEFUNCTION[dbo].[splitl](@StringVARCHAR(MAX),@DelimiterVARCHAR(MAX))RETURNS@temptableTABLE(itemsVARCHAR(MAX))ASBEGINDECLARE@idxINT=1DECLARE@sliceVARCHAR(MAX)IFLEN(@String)<1ORLEN(ISNULL(@String,''))=0RETURNWHILE@idx!=0BEGINSET@idx=CHARINDEX(@Delimiter,@String)IF@idx!=0SET@slice=LEFT(@String,@idx-1)ELSESET@slice=@StringIFLEN(@slice)>0INSERTINTO@temptable(items)VALUES(@slice)SET@String=RIGHT(@String,LEN(@String)-@idx)IFLEN(@String)=0BREAKENDRETURNENDGO--调用方法SELECT*FROMdbo.splitl('aaa|bbb|ccc','|')2.去掉数字末尾的0--去掉数字末尾的0endofthenumber'')set@returnValue=''--为空时为空elseif(charindex('.',@inValue)='0')set@returnValue=@inValue--elseif(substring(reverse(@inValue),patindex('%[^0]%',reverse(@inValue)),1)='.')set@returnValue=left(@inValue,len(@inValue)-patindex('%[^0]%',reverse(@inValue)))--小数点后全0,elseset@returnValue=left(@inValue,len(@inValue)-patindex('%[^0]%.%',reverse(@inValue))+1)--任何其他情况return@returnValueend--调用示例SELECTdbo.ClearZero(258.250300)3.创建表、视图、函数和存储过程,判断是否存在/*判断是否存在函数/方法存在,如果存在则删除该函数/方法*/IFEXISTS(SELECT*FROMdbo.sysobjectsWHEREname='Func_Name')DROPFUNCTIONFunc_Name;GO--创建函数/方法CREATEFUNCTIONFunc_Name(@aINT)RETURNINTASBEGIN--codingENDGO/*判断是否存在thestoredprocedureexists,ifitexists然后删除存储过程*/IFEXISTS(OBJECT_NAME('Proc_Name','P')ISNOTNULDROPPROCProc_Name;GO--创建存储过程CREATEPROCProc_NameASSELECT*FROMTable_NameGO/*判断数据表是否存在,如果存在存在,删除数据表*/IFEXISTS(SELECT*FROMdbo.sysobjectsWHEREname='Table_Name')DROPVIEWTable_Name;GO--创建数据表CREATETABLETable_Name(IdINTPRIMARYKEYNOTNULL)/*判断视图是否存在,存在则删除视图*/IFEXISTS(SELECT*FROMsys.viewsWHEREname='View_Name')DROPVIEWView_NameGO--创建视图CREATEVIEWView_NameASSELECTSELECT*FROMtable_nameGO4.金额转为大写/*说明:将数字金额转为中文金额示例:187.4转为100、800、40、4角*/CREATEFUNCTION[dbo].[CNumeric](@numnumeric(14,2))返回nvarchar(100)BEGINDeclare@n_datanvarchar(20),@c_datanvarchar(100),@n_strnvarchar(10),@iintSet@n_data=right(空格(14)+cast(cast(abs(@num*100)asbigint)asnvarchar(20)),14)Set@c_data=''Set@i=1WHILE@i<=14Beginset@n_str=substring(@n_data,@i,1)if@n_str<>''beginIFnot((SUBSTRING(@n_data,@i,2)='00')or((@n_str='0')and((@i=4)or(@i=8)or(@i=12)or(@i=14))))SET@c_data=@c_data+SUBSTRING(N'0123456789',CAST(@n_strASint)+1,1)IFnot((@n_str='0')and(@i<>4)and(@i<>8)and(@i<>12))SET@c_data=@c_data+SUBSTRING(N'千亿万亿圆角',@i,1)IFSUBSTRING(@c_data,LEN(@c_data)-1,2)=N'几亿'SET@c_data=SUBSTRING(@c_data,1,LEN(@c_data)-1)ENDSET@i=@i+1ENDIF@num<0SET@c_data='(负数)'+@c_dataIF@num=0SET@c_data='零圆'IF@n_str='0'SET@c_data=@c_data+'whole'RETURN(@c_data)END