gpt4 book ai didi

sql-server - 我应该使用 SqlString 还是字符串作为 SQLCLR UDF 的参数类型

转载 作者:行者123 更新时间:2023-12-04 02:58:10 24 4
gpt4 key购买 nike

Sqlxxx 数据类型与其 .NET 等效数据类型之间有何区别?

例如,为什么以及何时应该使用 SqlString 而不是 string

最佳答案

只要有可能,您应该为 SQLCLR 方法参数使用 SqlTypes 类型。只有 4 个 SQL Server 数据类型没有匹配的 Sql***** 类型:

  • TIME:使用TimeSpanTimeSpan?
  • DATETIME2:使用DateTime还是DateTime?
  • DATETIMEOFFSET:使用 TimeZoneOffsetTimeZoneOffset?
  • SQL_VARIANT:使用 object(NULL 作为 DbNull.Value 出现)

有关详细信息,请参阅以下 MSDN 页面:Mapping CLR Parameter Data

SqlStringstring 之间的一些区别(在某些情况下很重要)是 SqlString:

  • 保留由 Assembly 所在的数据库的默认 COLLATION 定义的编码,并且
  • 包含描述 LCIDSqlCompareOptions 的属性(即区分大小写、区分重音等),这些属性由程序集所在的数据库的默认 COLLATION 定义。使用 string(甚至 SqlChars)会丢失此信息。
  • 有方法返回一个byte[] -- GetUnicodeBytesGetNonUnicodeBytes -- 而 stringToCharArrayNVARCHAR 源数据编码为 UTF-16,每个字符将使用 2 个字节或 4 个字节,具体取决于字符。
  • 正确处理 T-SQL NULL。这可以通过 IsNull bool 属性(所有 Sql* 类型都有)进行测试。当作为 TVF 的返回值或列值传回时,使用静态属性 SqlString.Null(所有 Sql* 类型都有)。

当涉及到在 NVARCHAR(MAX)VARBINARY(MAX) 参数中发送大值时,您实际上可以将值从 SQL Server 流式传输到 SQL Server 的 CLR分别使用 SqlCharsSqlBytes 类型。在某些用例中,流式传输的效率要高得多(假设您一次不需要全部值(value))。此外,如果从未访问该参数,则根本不会发送任何数据,这与分别使用 SqlStringSqlBinary 时不同。

相关信息可以在我写的一篇关于SQLCLR的系列文章中找到:Stairway to SQLCLR Level 5: Development (Using .NET within SQL Server) (需要免费注册)。

关于sql-server - 我应该使用 SqlString 还是字符串作为 SQLCLR UDF 的参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9511885/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com