srv_convert(扩展存储过程 API)

重要说明重要提示

后续版本的 Microsoft SQL Server 将删除该功能。请不要在新的开发工作中使用该功能,并尽快修改当前还在使用该功能的应用程序。请改用 CLR 集成。

将数据从一个数据类型更改为另一数据类型。

语法


int srv_convert (
SRV_PROC *
srvproc
,
int
srctype
,
void *
src
,
DBINT
srclen
,
int
desttype
,
void *
  dest
,
DBINT
destlen
);

参数

  • srvproc
    指向作为特定客户端连接句柄的 SRV_PROC 结构的指针。该结构包含扩展存储过程 API 用于管理应用程序和客户端之间的通信和数据的所有控制信息。如果提供了 srvproc 句柄,则在出错时会将其传递给扩展存储过程 API 错误处理程序函数。

  • srctype
    指定要转换的数据的数据类型。该参数可以为任意一种扩展存储过程 API 数据类型。

  • src
    指向要转换的数据的指针。该参数可以为任意一种扩展存储过程 API 数据类型。

  • srclen
    指定要转换的数据的长度(单位为字节)。如果 srclen 为 0,srv_convert 将向目标变量中放入一个 Null 值。除非它为 0,否则对于固定长度数据类型,会忽略该参数,在这种情况下会假定源数据为 NULL。对于 SRVCHAR 数据类型的数据,长度为 -1 表示字符串以 Null 值结束。

  • desttype
    指示要将源转换为何种数据类型。该参数可以为任意一种扩展存储过程 API 数据类型。

  • dest
    指向接收转换后的数据的目标变量的指针。如果该指针为 NULL,srv_convert 将调用用户提供的错误处理程序(如果有的话),并返回 -1。

    如果 desttype 为 SRVDECIMAL 或 SRVNUMERIC,则 dest 参数必须为指向 DBNUMERIC 或 DBDECIMAL 结构的指针,并且此结构的精度和小数位数字段必须已设置为所需的值。您可以使用 DEFAULTPRECISION 指定一个默认精度,使用 DEFAULTSCALE 指定一个默认小数位数。

  • destlen
    指定目标变量的长度(单位为字节)。对于固定长度数据类型,则会忽略该参数。对于 SRVCHAR 类型的目标变量,值 destlen 必须为目标缓冲区空间的总长度。SRVCHAR 或 SRVBINARY 类型的目标变量的长度为 -1 时,表示有足够的可用空间。对于 srvchar 类型的目标变量,长度为 -1 将使字符串以 Null 值结束。

返回值

如果数据类型转换成功,则返回转换后的数据的长度(单位为字节)。当 srv_convert 遇到它不支持的转换请求时,它将调用开发人员提供的错误处理程序(如果有),设置全局错误号,并返回 -1。

注释

srv_willconvert 函数决定是否允许进行特定转换。

转换为近似的数字数据类型 SRVFLT4 或 SRVFLT8 可能会造成一定的精度损失。从近似的数字数据类型 SRVFLT4 或 SRVFLT8 转换为 SRVCHAR 或 SRVTEXT 也可能造成一定的精度损失。

转换为 SRVFLTx、SRVINTx、SRVMONEY、SRVMONEY4、SRVDECIMAL 或 SRVNUMERIC 时,如果数字大于目标的最大值,则可能导致上溢,如果数字小于目标的最小值,则可能导致下溢。如果在转换为 SRVCHAR 或 SRVTEXT 时发生上溢,则所得值的第一个字符将包含一个星号 (*),以指示出错。

将 SRVCHAR 转换为 SRVBINARY 时,srv_convert 将 SRVCHAR 解释为十六进制,无论字符串是否包含前导 0 都是如此。将 SRVBINARY 转换为 SRVCHAR 时,srv_convert 将创建一个不带前导 0 的十六进制字符串。在所有其他情况下,以 SRVBINARY 数据类型为目标类型或源类型的转换都是直接逐位复制。

在某些情况下,将数据类型转换为自身可能比较有用。例如,将 SRVCHAR 转换为 destlen 为 -1 的 SRVCHAR 将向字符串添加一个 Null 终止符。

有关数据类型和扩展存储过程 API 数据类型转换的说明,请参阅数据类型(扩展存储过程 API)

srv_convert 函数可能会因以下几种原因失败:

  • 请求的转换不可用。

  • 转换导致目标变量出现截断、上溢或精度损失。

  • 将字符串转换为数字数据类型时出现语法错误。

安全说明安全说明

应全面检查扩展存储过程的源代码,并在生产服务器上安装编译的 DLL 之前,对这些 DLL 进行测试。有关安全检查和测试的信息,请参阅该 Microsoft 网站