【问题标题】:Unable to convert field data-type无法转换字段数据类型
【发布时间】:2018-08-24 10:27:27
【问题描述】:

我正在使用 openquery 语句从链接服务器读取字段的内容,没有任何问题。该字段的数据类型为char(1)。但是,如果我尝试转换为不同的数据类型,openquery 会失败。

以下两种说法均无效:

select * from  FROM OPENQUERY(linkedserver, 
  'select CONVERT (NVARCHAR(),QCTL.GL_TRANS.TRAN_TYPE) AS TRAN_TYPE'

select * from  FROM OPENQUERY(linkedserver, 'select 
  IIF(QCTL.GL_TRANS.TRAN_TYPE = ''C'', -1 * QCTL.GL_TRANS.AMOUNT, 
  QCTL.GL_TRANS.AMOUNT) AS AMOUNT'

【问题讨论】:

    标签: sql-server linked-server openquery


    【解决方案1】:

    您必须在转换时指定长度或删除 ()。

    select * from FROM OPENQUERY(linkedserver, 'select CONVERT(NVARCHAR(1),QCTL.GL_TRANS.TRAN_TYPE) AS TRAN_TYPE'
    
    select * from FROM OPENQUERY(linkedserver, 'select CONVERT(NVARCHAR,QCTL.GL_TRANS.TRAN_TYPE) AS TRAN_TYPE'
    

    【讨论】:

    • 我之前确实尝试过,但它也不起作用。仅当它是 openquery 语句的一部分时才会出现此问题。换句话说,它将像这样工作: select convert(nvarchar,TRAN_TYPE) from openquery(linkedserver, ' select TRANTYPE FROM...')
    • 那为什么不能像上面那样在获取数据集时直接转换它呢?
    • 我需要在 openquery 语句中进行计算(如果 tran_type 为 'c' 则通过乘以负 1 来更改金额字段)。然后,在外部选择查询中计算出的金额相加(正数和负数。
    • 如果您跨网络进行计算,只需使用存储过程。 SELECT * FROM OPENQUERY(linkedserver, 'EXEC Database.dbo.StoredProcedure')
    猜你喜欢
    • 1970-01-01
    • 2021-06-06
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    相关资源
    最近更新 更多