sqlserver自定义函数如何返回结果集

这个函数的定义看起来很简单。
好吧,让我告诉你。

首先创建一个名为 fn_test 的函数,它接收一个 varchar(1 0) 类型的参数 @a。

然后这个函数返回一个表。
表结构中有一个字段叫keyId,也是varchar(2 0)。

在函数体中我们声明了一个变量@table,它也是一个表,并且与我们要返回的表具有相同的结构。

最后,简单粗暴地输入 return @table,然后结束函数定义。

下一步是使用 go 命令执行此函数。

嗯,这个过程就像做一道简单的数学题,写出公式,然后解决问题。
之前我对这个过程很困惑,但后来我发现其实很简单。

SqlServer Stuff

说白了,SqlServer的STUFF函数就是字符串的“抓取器”,专门用来改变特定位置的内容。
这东西用起来很方便,但一不小心,就会落入陷阱。

展开来说,有两个关键点:首先使用FORXMLPATH将多个字符串扭曲成一长行。
例如,我们去年运行项目,处理2 000个用户名时,直接使用FORXMLPATH,并用逗号分隔,秒级就能得到结果; 然后立即使用 STUFF 删除开头多余的逗号。
记得把替换长度设置为1 去年作弊的时候我试过用3 ,但是三个逗号都被删掉了。
还有另一个关键细节。
ReplaceWith_expression 不能长于 length。
如果六道口想改成“大别夜”,首先要保证新串足够短。

一开始我以为STUFF是简单的替换,后来发现错了。
它实际上是直接删除指定长度的字符,然后向其中插入新的内容,就像打碎墙上的一块砖,然后在上面放一块新砖一样。
等等,还有一件事,如果start加上length超过了原始字符串的长度,它不会报错,它只会替换整个字符串。

建议下次使用时,先在SSMS中单独运行FORXMLPATH,看看生成的分隔符是否足够,不要只关注STUFF部分。

C#怎么调用sqlserver的自定义函数

哎呀,自定义函数啊,这玩意儿在SQL Server里头用得挺多的。
2 02 2 年了,我还在想这个。

我们先来谈谈标量函数。
这个东西很简单,只是返回一个值。
想想看,要创建一个函数,你必须使用 CREATE FUNCTION。
函数名,参数,返回值类型,都得写清楚。
比如我要计算平均分。
函数名称为AvgResult,参数为scode,类型为varchar(1 0),返回值为real。
然后,在里面写SQL语句,最后RETURN一个值。
你看:
sql 创建函数 AvgResult(@scode varchar(1 0)) 真实回报 AS 开始 声明@avg real 声明 @code varchar(1 1 ) 设置@code = @scode + '%' SELECT @avg = avg(result) 来自 LearnResult_baijiali 代码类似于@code 返回@avg 结束
这样,当你调用时,它是 SELECT dbo.AvgResult('s0002 ') AS 结果。
可以使用 SET 或 SELECT 将此值分配给局部变量。
你看:
sql 声明 @avg1 实数、@avg2 实数、@avg3 实数 SELECT @avg1 = dbo.AvgResult('s0002 ') SET @avg2 = dbo.AvgResult('s0002 ') EXEC @avg3 = dbo.AvgResult 's0002 ' 选择@avg1 AS avg1 、@avg2 AS avg2 、@avg3 AS avg3
函数参考也很简单。
例如,我有一个名为 code 的函数,它根据 scode 返回 ccode。
Then I use:
sql in the query 选择姓名 来自班级 WHERE ccode = dbo.code('c001 ')
Next, let’s talk about table-valued functions. What this thing returns is a result set. There are two types, inline and multi-sentence.
内联是 RETURN (SELECT...)。
例如:
sql 创建函数 tabcmess(@code varchar(1 0)) 返回表 AS RETURN(选择代码,代码 来自 cmessagewhere ccode LIKE @code)
如果有多个句子,则必须使用RETURN @table。
必须首先定义表变量。
例如:
sql CREATE FUNCTION tabcmessalot(@code varchar(1 0)) 返回 @ctable 表(代码 varchar(1 0) NULL,cname varchar(1 00) NULL) AS 开始 插入@ctable 选择ccode,解释一下 来自消息 代码类似于@code 返回 结束
调用时,它是 SELECT FROM tabcmessalot('s0003 ')。

那么,在C中调用SQL自定义函数也很简单。
例如有一个函数叫GetProjectID,参数是@headStr和@date。
在 C 语言中,您可以编写:
csharp 私有无效文件号() { SqlConnection conn = new SqlConnection(connectionString); string strSql = "GetProjectID"; // 自定义SQL函数 SqlCommand cmd = new SqlCommand(strSql, conn); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@headStr", SqlDbType.NVarChar).Value = "ZQ3 "; // 输入参数 cmd.Parameters.Add("@date", SqlDbType.DateTime).Value = System.DateTime.Now.ToShortDateString(); // 输入参数 cmd.Parameters.Add("@returnString", SqlDbType.NVarChar); cmd.Parameters["@returnString"].Direction = ParameterDirection.ReturnValue; // Return parameters
try { conn.Open(); object o = cmd.ExecuteScalar(); this.txtAFileNO.Text = cmd.Parameters["@returnString"].Value.ToString(); } catch(异常前) { this.txtAFileNO.Text = ex.Message; } 最后 { if (!(conn.State == ConnectionState.Closed)) { conn.Close(); } } }
你看,连接、命令、参数、执行、返回值都写得一清二楚。
这样C就可以得到SQL函数的返回值了。

嘿,就是这样。
你用得越多,你就会变得越熟练。