Varchar

讓 Visual Studio 部署 UDF 以返回 NVARCHAR(MAX)

  • April 13, 2014

我在 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=-1SqlFacet

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]

引用自:https://dba.stackexchange.com/questions/63026