在SQL Server中转换数据类型

在SQL Server中转换数据类型,sql,sql-server,type-conversion,Sql,Sql Server,Type Conversion,我需要更改一些数据类型。我尝试过使用CAST关键字,但它无法解决问题。关于如何用CAST语句重写这两行有什么建议吗 从VarChar(100)强制转换到VarChar(20)时,可能会发生数据丢失 代码: 从NVarChar(512)转换到NVarChar时,可能会发生数据丢失 代码: 我尝试执行以下操作,但仍然产生错误: CAST((myVariable) as nvarchar) CAST用于在数据类型之间进行转换。听起来更像是应该使用LEFT: SELECT TOP 1 @variabl

我需要更改一些数据类型。我尝试过使用
CAST
关键字,但它无法解决问题。关于如何用
CAST
语句重写这两行有什么建议吗

  • VarChar(100)
    强制转换到
    VarChar(20)
    时,可能会发生数据丢失
  • 代码:

  • NVarChar(512)
    转换到
    NVarChar
    时,可能会发生数据丢失
  • 代码:

    我尝试执行以下操作,但仍然产生错误:

    CAST((myVariable) as nvarchar)
    

    CAST
    用于在数据类型之间进行转换。听起来更像是应该使用
    LEFT

    SELECT TOP 1 @variableId = LEFT(variableId,20)
    FROM @tempTable
    

    这不会给您任何警告,因为系统假定您已经知道将丢失正确的80个字符。

    对于使用
    CONVERT
    而不是
    CAST

    CONVERT(nvarchar, myVariable)
    
    是有效的语法,并且:

    CONVERT(varchar(20), myVariable)
    

    但是为了获取字符串的一部分,我们使用如下函数:

    • 子字符串(值表达式、开始表达式、长度表达式)

      返回字符、二进制、文本或图像表达式的一部分。
    • LEFT(字符表达式、整数表达式)

      返回具有指定字符数的字符串的左侧部分。
    • RIGHT(字符表达式、整数表达式)

      返回具有指定字符数的字符串的右侧部分


    您有什么问题?缩短字符串时,可能会丢失数据。这是意料之中的,也是你收到警告的原因。请更具体一些。你试了什么?您的数据和模式是什么样子的?你提供的信息非常自我解释:你的目标类型太小了,无法保留源数据类型的数据。好的,给我一分钟,我会更新帖子!
    CONVERT(nvarchar, myVariable)
    
    CONVERT(varchar(20), myVariable)