下面是这个函数,请问该怎么去调用?

alter function AutoNum(@prefix varchar(3))
returns varchar(20)
as
begin
DECLARE @str VARCHAR(20), @dateStr VARCHAR(6),@num VARCHAR(5),@oldStr VARCHAR(20),@dt datetime
select @dt=today from numdate
SET @dateStr=RIGHT(YEAR(@dt),2)+RIGHT('0'+Convert(VARCHAR(2),MONTH(@dt)),2)
+RIGHT('0'+Convert(VARCHAR(2),DAY(@dt)),2)
SELECT @oldStr=MAX(pigID) FROM pig

IF @oldStr is not null 
begin
declare @timer varchar(6),@amount varchar(5)--存放日期和流水号
set @timer=substring(@oldStr,4,9)--截取时间6位
set @amount=right(@oldStr,5)--截取流水号5位
if @timer=@dateStr--如果数据库表中的日期和当前日期相等,则在流水号上加1
set @str=@prefix+@timer+right('00000'+Convert(varchar(5),(@amount+1)),5)
else
set @str=@prefix+@dateStr+'00001'
end
IF @oldStr is null--如果数据表为空,则新生成一个编号
begin
set @str=@prefix+@dateStr+'00001'
end
return @str 
end
go

insert into pig(pigID) values(dbo.AutoNum('HQ-'))

哔哔one
浏览 90回答 2
2回答

qq_花开花谢_0

这里我们用C#做一个计算滑轮系统近似距离的函数,并把该函数部署到SqlServer2005上去,这里使用的方法是原始的,全手动方式的部署方式,主要的目的是为了理解部署原理,实际上直接开SqlServer数据库项目可能更容易些。首先让我们看一下滑轮传输带系统图示,如下图所示:用C#编写SQLServer自定义函数一、首先在VS2005里编写一个计算传输带距离的函数,源代码如下所示://自定义计算传输带距离的函数using System;using System.Collections.Generic;using System.Text;namespace SqlServerClr{public class pulley{public static double PulleyDistance(double Pulley1Diameter, double Pulley2Diameter, double BeltLength){double length = 0, a = 2.0;double b = BeltLength - 1.57 * (Pulley1Diameter + Pulley2Diameter);double c = System.Math.Pow(Pulley1Diameter - Pulley2Diameter, 2.0);//如果只是double b1 = (b * b) - (4 * a * c);if (b1 > 0){length = (b + Math.Sqrt(b1)) / (2 * a);//检查传输带是否合适if (length < ((Pulley1Diameter + Pulley2Diameter) / 2)){//返回0,如果传输带不合适;length = 0;}}//精度只允许一位小数return System.Math.Round(length, 1);}}}把以上CS文件编译为动态连接库, 在Visual Studio 2005 命令行模式下使用命令:csc /t:library /out:pulleylib.dll pulley.cs编译成功,得到了一个pulleylib.dll二、在SQL Sever 2005中部署CS的自定义函数--编译PulleyDistance函数Drop Assembly Mechanics --如果编译程序出错可以用此命令删除程序集Create Assembly Mechanics --Mechanics是编译程序集名称from 'E:\pulleyLib.dll'GoCreate function PulleyDistance(@diameter1 float,@diameter2 float,@beltLength float)--注意这里的三个参数名称可以和CS编写的静态函数不同,但类型要兼容一致returns floatAs External name[Mechanics].[SqlServerClr.pulley].[PulleyDistance]--CS中定义的静态函数全称一般为【命名空间.类名】.【函数名】,注意这里是区分大小写的,对应 [SqlServerClr.pulley].[PulleyDistance]GO--检查是否已经部署上了select dbo.PulleyDistance(3,2,100)--检查部署结果select routine_name,routine_body from information_schema.routines通过以上两步,一个.NetCLR的函数就部署到了SqlServer上了&nbsp;

吃鸡游戏

//定义&nbsp;SqlConnection conn = new SqlConnection(DbTool.getSQLConnString());string strSql = "AutoNum"; //" and user_role='Administrator'";SqlCommand cmd = new SqlCommand(strSql, conn);cmd.CommandType = CommandType.StoredProcedure;cmd.Parameters.Add("@cust_name",SqlDbType.NVarChar).Value="";cmd.Parameters.Add("@returnString", SqlDbType.NVarChar);cmd.Parameters["@returnString"].Direction = ParameterDirection.ReturnValue;string strRTN = "";//方法try{conn.Open();object o= cmd.ExecuteScalar();strRTN = cmd.Parameters["@returnString"].Value.ToString();}catch (Exception ex){LabelTestMSG.Text = ex.Message;}finally{if (!(conn.State == ConnectionState.Closed)){conn.Close();}}}--------------其实有个更简单的方法,你把函数封装到存储过程里,用exec的语句直接跟select语句一样的调用.&nbsp;
打开App,查看更多内容
随时随地看视频慕课网APP