Jus*_*ing 2 varchar functions sql-clr visual-studio-2013
我在 Visual Studio 2013 中有一个带有以下签名的 SQLCLR 存储过程:
[SqlFunction(DataAccess = DataAccessKind.Read, SystemDataAccess = SystemDataAccessKind.Read)]
public static SqlString ExecSql2Json(SqlString sql)
Run Code Online (Sandbox Code Playgroud)
或者我已经尝试过:
[SqlFunction(DataAccess = DataAccessKind.Read, SystemDataAccess = SystemDataAccessKind.Read)]
public static SqlChar ExecSql2Json(SqlChar sql)
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,参数和返回类型都被定义为NVARCHAR(4000). 我希望他们成为NVARCHAR(MAX)。
我知道我可以手动编写自己的CREATE PROCEDURE语句来进行细粒度控制。是否有任何选项可以更改 SQL Server 生成的部署 DDL,或者我是否只需要手动添加脚本来删除和读取具有正确签名的 UDF?
您需要SqlFacet为返回值指定一个。这与为SqlFacet输入参数指定 a 相同,只是您在它前面加上了前缀return:
对于(max)长度,MaxSize=-1在SqlFacet属性中使用,示例如下:
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class UserDefinedFunctions
{
[SqlFunction
(
DataAccess=DataAccessKind.None,
SystemDataAccess=SystemDataAccessKind.None,
IsDeterministic=true,
IsPrecise=true
)
]
[return: SqlFacet(IsFixedLength=false, IsNullable=true, MaxSize=-1)]
public static SqlString ScalarFunction1
(
[SqlFacet(IsFixedLength=false, IsNullable=true, MaxSize=-1)]
SqlString input
)
{
return input;
}
}
Run Code Online (Sandbox Code Playgroud)
为此 SQLCLR 函数生成的 T-SQL 脚本是:
CREATE FUNCTION [dbo].[ScalarFunction1]
(@input NVARCHAR (MAX))
RETURNS NVARCHAR (MAX)
AS
EXTERNAL NAME [Library].[UserDefinedFunctions].[ScalarFunction1]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
707 次 |
| 最近记录: |