适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
Analytics Platform System (PDW)
在 SQL Server 2005 (9.x) 之前,若要使用大值数据类型,必须进行特殊的处理。 大值数据类型是超过最大行大小 8 KB 的数据类型。 SQL Server 2005 (9.x) 引入了 varchar、nvarchar 和 varbinary 数据类型的最大说明符,以允许存储大小为 2^31 -1 字节的值。 表列和 Transact-SQL 变量可以指定 varchar(max)、 nvarchar(max) 或 varbinary(max) 数据类型。
以前,只有 SQL Server 数据类型(如 文本、 ntext 和 图像 )才能达到此类长度。 varchar、nvarchar 和 varbinary 的最大说明符使这些数据类型变得冗余。 但是,由于仍然提供长数据类型,因而大多数 OLE DB 和 ODBC 数据访问组件的接口将保持不变。 为了向后兼容以前的版本,SQL Server Native Client OLE DB 访问接口中的DBCOLUMNFLAGS_ISLONG标志,SQL Server Native Client ODBC 驱动程序中的SQL_LONGVARCHAR仍使用。 针对 SQL Server 2005 (9.x) 和更高版本编写的访问接口和驱动程序可以继续使用这些字词将新类型设置为最大长度不受限制。
SQL Server Native Client OLE DB 访问接口将 varchar(max)、varbinary(max)和 nvarchar(max)类型分别公开为 DBTYPE_STR、DBTYPE_BYTES 和 DBTYPE_WSTR。
如果列中的 varchar(max)、varbinary(max) 和 nvarchar(max) 数据类型的 max 大小设置为不受限制,则这些数据类型会通过返回列数据类型的核心 OLE DB 架构行集和接口表示为 ISLONG。
命令对象的 IAccessor 实现已更改为允许绑定为 DBTYPE_IUNKNOWN。 如果使用者指定 DBTYPE_IUNKNOWN 并将 pObject 设置为 Null,则提供程序将向使用者返回 ISequentialStream 接口,以便使用者可以对输出变量之外的 varchar(max)、nvarchar(max) 或 varbinary(max) 数据进行流式处理 。
将在所有结果行之后返回经过流式处理的输出参数值。 如果应用程序尝试通过调用 IMultipleResults::GetResult 移动到下一个结果集并且没有使用返回的所有输出参数值,则将返回 DB_E_OBJECTOPEN 。
为了支持流式处理,SQL Server Native Client OLE DB 访问接口需要按顺序访问可变长度参数。 也就是说,只要 varchar(max)、nvarchchar(max) 或 varbinary(max) 列或输出参数绑定到 DBTYPE_IUNKNOWN,DBPROP_ACCESSORDER 就必须设置为 DBPROPVAL_AO_SEQUENTIALSTORAGEOBJECTS 或 DBPROPVAL_AO_SEQUENTIAL。 如果不遵守此访问顺序限制,对 IRowset::GetData 的调用将失败,并出现 DBSTATUS_E_UNAVAILABLE 。 如果不存在使用 DBTYPE_IUNKNOWN 的任何输出绑定,则不会应用此限制。
SQL Server Native Client OLE DB 访问接口还支持将输出参数绑定为大型值数据类型的DBTYPE_IUNKNOWN,以方便存储过程将大型值类型作为作为DBTYPE_IUNKNOWN公开给客户端的返回值的情况。
若要使用这些类型,应用程序可以使用以下选项:
- 绑定为支持与列的基类型进行绑定的类型(例如,对于 nvarchar(max),绑定为可绑定到 nvarchar 的类型)。 如果缓冲区不够大,将发生截断,以便与基类型完全相同,虽然现在可以使用更大的值。
- 绑定为支持与列的基类型进行转换的类型,同时还指定 DBTYPE_BYREF。
- 绑定为 DBTYPE_IUNKNOWN 并使用流处理。
报告列的最大大小时,SQL Server Native Client OLE DB 访问接口将报告:
- 定义的最大大小(例如,varchar(2000) 列为 2000,或
- “unlimited”值,如果 varchar(max) 列等于 ~0。 此值是为 DBCOLUMN_COLUMNSIZE 元数据属性设置的。
将向 varchar(max) 列应用的标准转换规则,也就是说,对于 varchar(2000) 列有效的任何转换对于 varchar(max) 列也有效。 这也适用于 nvarchar(max) 和 varbinary(max) 列 。
在检索大值类型时,最有效的方法是绑定为 DBTYPE_IUNKNOWN 并将行集属性 DBPROP_ACCESSORDER 设置为 DBPROPVAL_AO_SEQUENTIALSTORAGEOBJECTS。 这会导致该值直接从网络上进行流式处理,而不进行中间缓冲处理,如下例所示:
有关 SQL Server Native Client OLE DB 访问接口如何公开大型值数据类型的详细信息,请参阅 BLOB 和 OLE 对象。
SQL Server Native Client ODBC 驱动程序在接受或返回 ODBC SQL 数据类型的 ODBC API 函数中将 varchar(max)、varbinary(max)和 nvarchar(max)类型公开为 SQL_VARCHAR、SQL_VARBINARY 和 SQL_WVARCHAR。
在报告列的最大大小时,该驱动程序将报告以下两个值之一:
- 定义的最大大小(例如,varchar(2000) 列为 2000,或
- 如果 varchar(max) 列等于 0,则值为“unlimited”。
标准转换规则适用于 varchar(max) 列,这意味着对 varchar(2000) 列有效的任何转换也将对 varchar(max) 列有效。 这也适用于 nvarchar(max) 和 varbinary(max) 列 。
下面列出了经过增强以便使用大值数据类型的 ODBC API 函数:
- SQLBindCol
- SQLBindParameter
- SQLColAttribute
- SQLColumns
- SQLDescribeCol
- SQLDescribeParam
- SQLGetData
- SQLGetTypeInfo
SQL Server Native Client 功能
到此这篇sqluldr2 字符集(sqlyog字符集设置)的文章就介绍到这了,更多相关内容请继续浏览下面的相关 推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/sqlbc/45978.html