Varchar
讓 Visual Studio 部署 UDF 以返回 NVARCHAR(MAX)
我在 Visual Studio 2013 中有一個帶有以下簽名的 SQLCLR 儲存過程:
[SqlFunction(DataAccess = DataAccessKind.Read, SystemDataAccess = SystemDataAccessKind.Read)] public static SqlString ExecSql2Json(SqlString sql)
或者,我嘗試過:
[SqlFunction(DataAccess = DataAccessKind.Read, SystemDataAccess = SystemDataAccessKind.Read)] public static SqlChar ExecSql2Json(SqlChar sql)
無論哪種方式,參數和返回類型都被定義為
NVARCHAR(4000)
. 我希望他們成為NVARCHAR(MAX)
。我知道我可以手動編寫自己的
CREATE PROCEDURE
語句來進行精細控制。是否有任何選項可以更改 SQL Server 生成的部署 DDL,還是我只需要手動添加腳本來刪除並讀取具有正確簽名的 UDF?
您需要
SqlFacet
為返回值指定 a 。這與為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; } }
為此 SQLCLR 函式生成的 T-SQL 腳本是:
CREATE FUNCTION [dbo].[ScalarFunction1] (@input NVARCHAR (MAX)) RETURNS NVARCHAR (MAX) AS EXTERNAL NAME [Library].[UserDefinedFunctions].[ScalarFunction1]