【发布时间】:2015-08-18 20:47:11
【问题描述】:
我想编写一个接受DATETIME2 并返回DATETIME2 的SQLCLR UDF。
输入和输出应该允许 NULL。
我创建一个 SQL Server 数据库项目 (SSDT),在其 SQLCLR 属性中将其配置为 VB 语言,然后添加以下文件 Test.vb:
Option Explicit On
Option Strict On
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.SqlTypes
Imports Microsoft.SqlServer.Server
Partial Public Class UserDefinedFunctions
<SqlFunction()> _
Public Shared Function Test(d As Nullable(Of DateTime)) As Nullable(Of DateTime)
Return d
End Function
End Class
从 SQL Server 2008 开始,http://msdn.microsoft.com/en-us/library/ms131092(v=SQL.100).aspx 就支持这种方式使用 nullable。
但是,当我运行部署命令时,我收到以下错误:
SQL46010:) 附近的语法不正确。
这是因为它生成的 SQL 是:
CREATE FUNCTION [dbo].[Test] (@d /* Error: Unsupported type. */)
RETURNS /* Error: Unsupported type. */
AS EXTERNAL NAME [Test].[Test.UserDefinedFunctions].[Test];
我无法替换 SqlDateTime,因为我需要 DATETIME2 的完整范围和精度。
【问题讨论】:
-
我相信 SQLDateTime 在较新的 .NET 版本中具有更高的分辨率。你试过吗?
-
对不起,我上面的评论不是真的:msdn.microsoft.com/en-us/library/…
-
Jason:我知道已经有几年了,但以防万一你还在寻求帮助,我刚刚发布了一个答案 :-)。
标签: sql-server sqlclr sql-server-data-tools