重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

sqlserver建函数,数据库中创建函数的sql语句是

SqlServer如何用Sql语句自定义聚合函数

Sql Server自定义聚合函数详细步骤

成都创新互联是专业的田家庵网站建设公司,田家庵接单;提供网站建设、成都网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行田家庵网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

开始-

输出-

首先用VS2008/VS2005建立一个SQL Server项目,右键解决方案添加新项

点击“确定”按钮后,SQL Server项目会要求连接一个数据库,我们可以选择一个数据库

然后在工程中加入一个聚合类(joinstr.cs),如图

joinstr.cs中的最终代码如下:

using System;

using System.Data;

using System.Data.SqlClient;

using System.Data.SqlTypes;

using Microsoft.SqlServer.Server;

using System.Text;

[Serializable]

[SqlUserDefinedAggregate(

Format.UserDefined, //use custom serialization to serialize the intermediate result

IsInvariantToNulls = true, //optimizer property

IsInvariantToDuplicates = false, //optimizer property

IsInvariantToOrder = false, //optimizer property    

MaxByteSize = 8000), //maximum size in bytes of persisted value

]

public struct JoinStr:IBinarySerialize

{

private StringBuilder sbIntermediate;

public void Init()

{

sbIntermediate = new StringBuilder();

}

public void Accumulate(SqlString Value)

{

if (Value == null || Value.ToString().ToLower().Equals("null"))

{

return;

}

else

{

sbIntermediate.Append(Value);

}

}

public void Merge(JionStr Group)

{

sbIntermediate.Append(Group.sbIntermediate);

}

public SqlString Terminate()

{

return new SqlString(sbIntermediate.ToString());

}

// This is a place-holder member field

#region IBinarySerialize Members

public void Read(System.IO.BinaryReader r)

{

sbIntermediate = new StringBuilder(r.ReadString());

}

public void Write(System.IO.BinaryWriter w)

{

w.Write(this.sbIntermediate.ToString());    

}

#endregion

}

在编写完上述代码后,可以使用Visual Studio来部署(右向工程,在弹出菜单上选“部署”即可)。

在执行上面的SQL语句之前,需要将SQL Server2005的clr功能打开

现在可以使用joinstr来聚合字符串了。

select [t_code_role].[role_mc] as '角色',dbo.JoinStr([t_code_right].[right_mc]+',') as '权限' from [t_data_roleright],[t_code_right],[t_code_role] where [t_data_roleright].[role_bm]=[t_code_role].[role_bm] and [t_data_roleright].[right_bm]=[t_code_right].[right_bm] group by [t_code_role].[role_mc]

如何:创建和运行 CLR SQL Server 用户定义的函数

部署成功后,可调用并执行用户定义的函数。注意

在默认情况下,Microsoft

SQL

Server

中关闭了

公共语言运行库

(CLR)

集成功能。必须启用该功能才能使用

SQL

Server

项目项。若要启用

CLR

集成,请使用

sp_configure

存储过程

的“启用

clr”选项。有关更多信息,请参见启用

CLR

集成。注意显示的对话框和菜单命令可能会与帮助中的描述不同,具体取决于您现用的设置或版本。若要更改设置,请在“工具”菜单上选择“导入和导出设置”。有关更多信息,请参见

Visual

Studio

设置。

创建用户定义的

SQL

Server

函数

使用Visual

Studio

建立和部署此函数

C++

示例在编译时必须使用

/clr:safe

编译器

选项。

对于Visual

Basic

Visual

C#,在“解决方案

资源管理器

”中,打开“TestScripts”文件夹,然后双击“Test.sql”文件,以打开它进行编辑。添加执行您的

用户定义函数

的代码。请参见下面的第二个示例。对于Visual

C++,在“解决方案资源管理器”中双击“debug.sql”文件,以打开它进行编辑。添加执行您的用户定义函数的代码。请参见下面的第二个示例。将用户定义函数部署到

SQL

Server。有关更多信息,请参见如何:将

SQL

Server

项目项部署到

SQL

Server

中。按F5

通过在

SQL

Server

上执行用户定义的函数来对其进行调试。下面的代码示例创建用户定义的将价格作为参数的

标量函数

addTax,添加

销售税

并返回价格和销售税的加和。创建该函数后,将其部署到

SQL

Server。有关更多信息,请参见如何:将

SQL

Server

项目项部署到

SQL

Server

中Visual

Basic

复制代码

Imports

System.Data.SqlTypes

Imports

Microsoft.

SqlServer

.ServerPartial

Public

Class

UserDefinedFunctions

Public

Const

SALES_TAX

As

Double

=

0.086

_

Public

Shared

Function

addTax(ByVal

originalAmount

As

SqlDouble)

As

SqlDouble

Dim

taxAmount

As

SqlDouble

=

originalAmount

*

SALES_TAX

Return

originalAmount

+

taxAmount

End

FunctionEnd

ClassC#

复制代码

using

System.Data.SqlTypes;

using

Microsoft.SqlServer.Server;public

partial

class

UserDefinedFunctions{public

const

double

SALES_TAX

=

.086;

[SqlFunction()]

public

static

SqlDouble

addTax(SqlDouble

originalAmount){SqlDouble

taxAmount

=

originalAmount

*

SALES_TAX;

return

originalAmount

+

taxAmount;}}C++

复制代码

#include

"stdafx.h"#using

#using

#using

using

namespace

System;

using

namespace

System::Data;

using

namespace

System::Data::Sql;

using

namespace

System::Data::SqlTypes;

using

namespace

Microsoft::SqlServer::Server;//

In

order

to

debug

your

Aggregate,

add

the

following

to

your

debug.sql

SELECT

dbo.addTax(10)

//public

ref

class

UserDefinedFunctions{public:static

initonly

double

SALES_TAX

=

0.086;

[SqlFunction()]

static

SqlDouble

AddTax(SqlDouble

originalAmount){SqlDouble

taxAmount

=

originalAmount

*

SALES_TAX;

return

originalAmount

+

taxAmount;}};向您的项目中

TestScripts

文件夹中的

Test.sql(在

Visual

C++

中为

debug.sql)文件,添加用于测试用户定义函数的代码。例如,若要测试此函数,请使用查询,如“SELECT

dbo.addTax(10)”。您应见到返回的值“10.86”。

复制代码

创建SQLServer自定义函数报错,可是同样的代码可以创建过程! 求大神帮忙看看!!!

存储过程可以 你就建存储过程呗

你这个 报错很明显 函数 不让你这么干

在函数内对带副作用的运算符 'SELECT INTO' 的使用无效。

你换个招试试

比如 select count(*)=@v_count as dd from khn_configgroup where config_id=@template_id and group_id=@group_id;

sqlsever函数变量如何赋值我也不是很清楚 没用过

或者用 set let

用SQLserver写阶层和创建一个函数要怎么写

create function f_factorial (@t int)

returns int

as

begin

declare @i int,@total int

set @i=1

set @total=1

while @i=@t

begin

set @total=@total*@i

set @i=@i+1

end

return @total

end

调用

select dbo.f_factorial(10)

sqlserver创建函数 用表名+年月日+4位随机数作为主键如何建立?

SELECT (表名+getdate()+cast(rand() * (1000) AS int)) as value from t_table

sqlserver 应该有一个timestamp类型 那个是秒后面6位。。。 用那个其实就可以了

SqlServer函数

创建自定义函数:

use 数据库名

go

create function 函数名

(@pno int)

returns int

as

begin

declare @a int

if not exists(select * from person where pno=@pno)

set @a=-1

else

set @a=1

return @a

end

调用函数:

use 数据库名

go

select dbo.函数名(13250)


当前标题:sqlserver建函数,数据库中创建函数的sql语句是
URL分享:http://cqcxhl.com/article/dsgjhes.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP