2

为了编写一些虚拟存储过程,我想知道是否可以用 C# 编写它们,因为我不太了解 T-SQL。

同一过程的 C# 和 T-SQL 版本是否与使用标准数据库库类调用代码(例如 C++/C#/Java 代码)没有区别?

4

1 回答 1

6

是的,来电者不会知道其中的区别。但是,有一些 API 差异:

  • LOB 类型的参数(即NVARCHAR(MAX)VARBINARY(MAX)XML)在 SQLCLR 对象中不能有默认值。(Microsoft Connect 建议投票,也许:支持 SQLCLR 对象中 NVARCHAR(MAX)、VARBINARY(MAX) 和 XML 类型的默认参数值
  • 您不能将 TVP 传递给 SQLCLR 对象。
  • 您不能从 SQLCLR 对象返回以下数据类型:
    • SMALLDATETIME
    • SMALLMONEY
  • 您不能向/从 SQLCLR 对象传入或返回以下数据类型:
    • CHAR
    • VARCHAR
    • TEXT
    • NTEXT
    • IMAGE


除了对问题的技术回答之外,还有一些事情需要考虑:

  • 你觉得在 C# 中比在 T-SQL 中更容易做什么?
  • 究竟什么被认为是“虚拟的”?你只需要一个签名吗?如果是这样,那么在纯 T-SQL 中执行此操作会容易得多。T-SQL 做一个模拟存储过程所需要做的就是:

    CREATE PROCEDURE SchemaName.ProcedureName
    (
      @Param1name  Param1Type,
      @Param2name  Param2Type,
      ...
    )
    AS
    SELECT  CONVERT(resultField1type, NULL) AS [resultField1name],
            CONVERT(resultField2type, NULL) AS [resultField2name],
            ...
                ;
    
  • 术语“dummy”意味着这些将在以后被其他东西替换。他们会被什么取代?T-SQL 存储过程?如果您不了解 T-SQL,谁会编写这些?

  • 如果您不了解 T-SQL,并且没有任何了解 T-SQL 的人帮助您(因此需要在 SQLCLR 中创建“虚拟”存储过程),那么您怎么知道您正在构建这个解决方案正确吗?无论 T-SQL 还是 SQLCLR,你都可能走错了方向。
于 2016-03-10T17:59:02.710 回答