【问题标题】:SQL DataType Conversion ErrorSQL 数据类型转换错误
【发布时间】:2013-12-24 06:52:55
【问题描述】:

我正在尝试这段代码:

DECLARE @testID varchar(max)
set @testID = '1,2,3'

Delete from [Test] where [Test_ID] in (@testID)

但我收到一个错误:

将 varchar 值 '1,2,3' 转换为数据类型 int 时转换失败。

谁能帮帮忙....

【问题讨论】:

  • 当你在 ' 和 ' 之间放置一些东西时,它意味着 sql 中的字符串。

标签: sql sql-server sql-delete type-conversion


【解决方案1】:

你试过了吗

declare @testID varchar(max)
set @testID =1,2,3
set @testID='delete from [Test] where [Test_ID] in('+@testID+')'
exec(@testID)

【讨论】:

    【解决方案2】:

    您的查询编译为

    Delete from [Test] where [Test_ID] in ('1,2,3')
    

    但应该是的

    Delete from [Test] where [Test_ID] in ('1','2','3')
    

    您不能将 单个 字符串放入 IN 子句中。使用单独的值。

    【讨论】:

    • :) 我没注意到...谢谢
    【解决方案3】:

    你的删除查询应该是这样的

    Delete From [Test] Where [Test_ID] in (1,2,3) 
    

    但您不能,因为您的参数是 csv 格式。所以你必须列出一个int。并删除此列表中包含的记录。

    试试这个:

    declare @xml xml = N'<root><r>' + replace(@testID ,',','</r><r>') + '</r></root>';
    Delete From [Test] Where [Test_Id] in (
    select * from(select t.value('.','int') as ID from @xml.nodes('//root/r') as a(t)) r
    
    )
    

    【讨论】:

      【解决方案4】:

      试试这个:

      DECLARE @testID VARCHAR(MAX);
      SET @testID = '1,2,3';
      DELETE FROM [Test] WHERE ',' + @testID + ',' LIKE '%,' + [Test_ID] + ',%'
      

      DELETE FROM [Test] WHERE [Test_ID] IN (1,2,3)
      

      【讨论】:

        【解决方案5】:

        另一种可能的方式...请参阅下文...

          DECLARE @testID varchar(max)
         DECLARE @testExec varchar(max)
        set @testID = '1,2,3'
        Set @testExec = 'Delete from IMPCT_INTAKE_REQ where IMPCT_INTAKE_ID in ('+@testID+')'
        print @testExec
        execute (@testExec)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-19
          • 1970-01-01
          • 1970-01-01
          • 2016-12-06
          相关资源
          最近更新 更多