为CLR存储过程指定SqlString长度

时间:2011-03-30 11:30:05

标签: c# visual-studio-2008 sql-server-2008 stored-procedures clr

我现在正在用C#编写存储过程,但我遇到了参数大小的问题。

所以我在VS 2008中创建了一个项目并创建了几个存储过程,看起来有点像这样:

public partial class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void SaveProgress(... SqlString logpart, ...)
    {
        ...stuff...
    }
}

现在因为我没有指定任何其他内容,当我将其部署到数据库时,CREATE DATABASE语句(显然)创建时使用nvarchar(4000)作为输入参数的定义。

但是,我经常需要刷新大于4000个字符的日志部分,所以我希望它是nvarchar(MAX)

现在我想我可以做一些jiggery-pokery并使用Management Studio来重新定义CREATE DATABASE语句,但我实际上想定义一个事实,我希望它是MAX在项目/解决方案中,部署正确完成,我不必开始为需要在我之后维护此代码的任何人添加大量的评论和/或文档。

有没有办法在代码中或者在AssemblyInfo中指定这个或类似的东西?

2 个答案:

答案 0 :(得分:3)

回顾这几年后,我尝试在一个从数据库读取数据的函数中使用SqlChars,并返回一个带有数据的格式化字符串。使用SqlChars实际上制作了功能炸弹,声明它无法找到链接服务器系统 - 一条似乎与问题无关的错误消息,因为我从来没有在第一个引用链接服务器的地方。

将返回类型和参数更改回SqlString,将[return:SqlFacet(MaxSize = -1)]属性添加到函数中,并为每个参数添加[SqlFacet(MaxSize = -1)],使我的函数正常工作。

答案 1 :(得分:2)

尝试使用SqlChars。 SqlChars自动映射到NVARCHAR(MAX)