Sql server 将数据类型varchar转换为数字时发生SQL错误

Sql server 将数据类型varchar转换为数字时发生SQL错误,sql-server,tsql,Sql Server,Tsql,我需要提出以下问题: 声明@no为varchar100 但是一直都有这个错误:将数据类型varchar转换为数值时出错 fno在表中是数字的您不能直接选择@no之类的数据,因为like希望数据作为表。请尝试: declare @no nvarchar(max) set @no='11,2,23' select * from ft (nolock) where fno in ( SELECT Split.a.value('.', 'VARCHAR(100)')

我需要提出以下问题:

声明@no为varchar100

但是一直都有这个错误:将数据类型varchar转换为数值时出错


fno在表中是数字的

您不能直接选择@no之类的数据,因为like希望数据作为表。请尝试:

declare @no nvarchar(max)
set @no='11,2,23'

select * from ft (nolock) where fno in (    
    SELECT 
         Split.a.value('.', 'VARCHAR(100)') AS CVS  
    FROM  
    (
         SELECT
             CAST ('<M>' + REPLACE(@no, ',', '</M><M>') + '</M>' AS XML) AS CVS  
    ) AS A CROSS APPLY CVS.nodes ('/M') AS Split(a))

不能直接选择@no中的数据,因为like希望数据作为表。请尝试:

declare @no nvarchar(max)
set @no='11,2,23'

select * from ft (nolock) where fno in (    
    SELECT 
         Split.a.value('.', 'VARCHAR(100)') AS CVS  
    FROM  
    (
         SELECT
             CAST ('<M>' + REPLACE(@no, ',', '</M><M>') + '</M>' AS XML) AS CVS  
    ) AS A CROSS APPLY CVS.nodes ('/M') AS Split(a))

您可以使用表变量而不仅仅是varchar变量轻松完成您试图创建的查询:

declare @t table (
        n int
)

insert into @t
values
 (1)
,(2)
,(3)

select
        *
from someTable
where n in (
        select 
            n
    from @t
)

您可以使用表变量而不仅仅是varchar变量轻松完成您试图创建的查询:

declare @t table (
        n int
)

insert into @t
values
 (1)
,(2)
,(3)

select
        *
from someTable
where n in (
        select 
            n
    from @t
)

@no被声明为varchar,您可以像这个Exec'select*from dbo.CM_Address nolock,其中ID在'+@no+中您应该阅读这篇关于SQL Server中数组的文章,但它可能无法为您提供精确的T-SQL来解决您的问题,它肯定会帮助您理解当前SQL不起作用的原因以及应该如何修复它。用逗号分隔的多个参数与恰好包含逗号的单个字符串参数之间存在差异。这在SQL中是正确的,就像在我能想到的任何其他编程语言中一样。为什么希望SQL Server检查单个参数并决定自动将其转换为多个参数?@no声明为varchar,您可以像这个Exec“select*from dbo.CM_Address nolock,其中ID在”+@no+中这样做,您应该阅读这篇关于SQL Server中阵列的文章,但它可能无法为您提供精确的T-SQL来解决您的问题,它肯定会帮助您理解当前SQL不起作用的原因以及应该如何修复它。用逗号分隔的多个参数与恰好包含逗号的单个字符串参数之间存在差异。这在SQL中是正确的,就像在我能想到的任何其他编程语言中一样。为什么希望SQL Server检查单个参数并决定自动将其转换为多个参数?