【问题标题】:How to call C# function in stored procedure如何在存储过程中调用C#函数
【发布时间】:2011-04-29 11:29:16
【问题描述】:

SQL Server 2005 支持 CLR,所以这意味着我们可以在后端使用 CLR,那么如何做到这一点,我在 c# 中有一些函数可以对日期时间变量进行一些复杂的操作,现在我想在 SP 中使用这些函数。首先,是否可以这样做。

【问题讨论】:

  • 什么样的“日期时间变量的复杂操作”;我个人还没有遇到过用 TSQL 做不到的……
  • 是的,你是对的,我们可以在 TSQL 中使用日期时间进行所有操作。这里复杂的操作部分在 dll 中,所以我们必须使用它们(可重用性)。所以我的问题是我们可以在 TSQL 中调用这些函数吗?

标签: sql sql-server sql-server-2005 tsql sqlclr


【解决方案1】:

是的,可以在 SQL Server 2005 数据库中使用 .NET。请注意,SQL Server 2005 支持的 .NET 版本是 2.0。

Here's a link for an introduction to Making a CLR stored procedure using Visual Studio

【讨论】:

    【解决方案2】:

    看看这个 TSQL 示例

    USE [XXX] GO SET ANSI_NULLS OFF GO SET QUOTED_IDENTIFIER OFF GO CREATE PROCEDURE [dbo].[Testing_XXX]
    @broadcastId [int],
    @XXXTemplateHtml [nvarchar](max),
    @XXXTemplateText [nvarchar](max),
    @XXXTemplateSubject [nvarchar](max),
    @XXXTemplateEmailHeaders [nvarchar](max),
    @XXXTemplateHeader [nvarchar](max),
    @XXXTemplateFooter [nvarchar](max),
    @masterTemplate [nvarchar](max),
    @parseOptions [nvarchar](4000),
    @xsltTemplate [nvarchar](max) OUTPUT WITH EXECUTE AS CALLER AS EXTERNAL NAME  SolutionXXX.ProjectXXX].[StoredProcedures].[XXX_Parser_Parse] GO
    

    当你打电话时

    EXTERNAL NAME [SolutionXXX.ProjectXXX].[StoredProcedures].[XXX_Parser_Parse]
    

    它调用的 C# 函数看起来像这样

     [SqlProcedure]
    public static void XXX_Parser_Parse(
        SqlInt32 broadcastId,
        [SqlFacet(MaxSize = -1)] 
        SqlString XXXTemplateHtml,
        [SqlFacet(MaxSize = -1)] 
        SqlString XXXTemplateText,
        [SqlFacet(MaxSize = -1)] 
        SqlString XXXTemplateSubject,
        [SqlFacet(MaxSize = -1)] 
        SqlString XXXTemplateEmailHeaders,
        [SqlFacet(MaxSize = -1)] 
        SqlString XXXTemplateHeader,
        [SqlFacet(MaxSize = -1)] 
        SqlString XXXTemplateFooter,
        [SqlFacet(MaxSize = -1)] 
        SqlString masterTemplate,
        SqlString parseOptions,
        [SqlFacet(MaxSize = -1)] 
        out SqlString xsltTemplate)
    {
    //blah blah blh
    }
    

    【讨论】:

      猜你喜欢
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      • 2017-04-23
      • 2017-09-29
      • 2012-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多