为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

哔哔one 2022-12-15 18:14:24
alter function AutoNum(@prefix varchar(3))returns varchar(20)asbeginDECLARE @str VARCHAR(20), @dateStr VARCHAR(6),@num VARCHAR(5),@oldStr VARCHAR(20),@dt datetimeselect @dt=today from numdateSET @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 pigIF @oldStr is not null begindeclare @timer varchar(6),@amount varchar(5)--存放日期和流水号set @timer=substring(@oldStr,4,9)--截取时间6位set @amount=right(@oldStr,5)--截取流水号5位if @timer=@dateStr--如果数据库表中的日期和当前日期相等,则在流水号上加1set @str=@prefix+@timer+right('00000'+Convert(varchar(5),(@amount+1)),5)elseset @str=@prefix+@dateStr+'00001'endIF @oldStr is null--如果数据表为空,则新生成一个编号beginset @str=@prefix+@dateStr+'00001'endreturn @str endgoinsert into pig(pigID) values(dbo.AutoNum('HQ-'))
查看完整描述

2 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

这里我们用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'
Go

Create function PulleyDistance
(
@diameter1 float,
@diameter2 float,
@beltLength float
)
--注意这里的三个参数名称可以和CS编写的静态函数不同,但类型要兼容一致
returns float
As 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上了

 


查看完整回答
反对 回复 2022-12-18
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

//定义 
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语句一样的调用.

 


查看完整回答
反对 回复 2022-12-18
  • 2 回答
  • 0 关注
  • 85 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信