menu

秋梦无痕

一场秋雨无梦痕,春夜清风冻煞人。冬来冷水寒似铁,夏至京北蟑满城。

Avatar

Glance Off Yukon

from: divino@blogger.cn
存储过程使用.NET组件

.net fx 2.0新增了一个Data Provider的名字空间:System.Data.SqlServer

举个例子:
using System;
using System.Data.SqlServer;
namespace DateAccess
{
public class UserInfoDAO
{
public static int GetUserCount()
{
SqlCommand cmd = SqlContext.GetCommand();
int count = (int)cmd.ExecuteScalar();
return count;
}
}
}

其中的SqlContext是一个数据库上下文信息类

将其编译为组件后,装入数据库:
CREATE ASSEMELY UserInfoDAO FROM 'C:\Test\DateAccess.dll'

在存储过程中使用:
CREATE PROCEDURE GetUserCount
AS
EXTERNAL NAME DateAccess:[DateAccess::UserInfoDAO]::GetUserCount
其中EXTERNAL NAME的调用语法是:AssemblyName:[NamespaceName::ClassName]:MethodName

最后像平常一样使用这个存储过程就可以了,好像有点麻烦~~~,另外用户自定义函数也可以类似的这样使用。

T-SQL异常处理语法

这个比较简单没什么说的
CREATE PROCEDURE InsertUser
@ID int,
@UserName varchar(20)
AS
SET XACT_ABORT ON
BEGIN TRY
BEGIN TRAN
INSERT UserInfo VALUES(@ID, @UserName)
COMMIT TRAN
END TRY
BEGIN CATCH TRAN_ABORT
ROLLBACK TRAN
END CATCH

对XML类型字段的操作

假设UserInfo表有一个DetailInfo字段是xml类型,其中一条记录内容是<user><name>Divino</name></user>

1.XML格式的字段的查询,使用query方法:
DECLARE @User xml
DECLARE @UserName xml
SELECT @User=DetailInfo FROM UserInfo WHERE ID=1
SET @UserName = @User::query("/user/name")
PRINT CONVERT(varchar, @UserName)
输出:
<name>Divino</name>

2.如果不希望查询结果是xml格式,可以使用value方法:
SELECT DetailInfo::value("/user/name") AS User FROM UserInfo WHERE ID=1
输出:
User
---------
Divino

3.另外还包括exist和modify两种方法,用于查询xml类型字段是否包含特定结点和更新结点内容,需要结合XML DML语言。

评论已关闭