SQL错误转换数据类型为varchar到数字
问题描述:
我需要做此查询:SQL错误转换数据类型为varchar到数字
declare @no as varchar(100)
set @no='11,2,23'
select * from ft (nolock) where fno in (@no)
,但有此错误的所有时间:错误转换数据类型为varchar到数字
的FNO是表中的数字
答
由于LIKE
需要数据作为表,因此无法直接选择数据,如in (@no)
。请尝试:
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))
+0
+1很棒。声明中的XML语法对我来说仍然是巫术。 – 2013-05-14 10:49:34
+0
您的+1转到stackoverflow :)从它学到很多技巧! – TechDo 2013-05-14 10:51:14
答
您可以轻松地完成你试图用一个表变量,而不是仅仅一个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)'('+ @ no +')'中的ID – bummi 2013-05-14 10:38:44
您应该阅读关于SQL Server数组中的这篇文章http://www.sommarskog.se/arrays-in-sql -2008.html虽然它可能不会为您提供确切的T-SQL来解决您的问题,但它肯定会帮助您理解为什么当前的SQL不起作用以及如何解决它。 – codingbadger 2013-05-14 10:42:44
以逗号分隔的多个参数与发生*包含*逗号的单个字符串参数之间存在差异。 SQL中的情况与我所能想到的任何其他编程语言一样。为什么你会期望SQL Server检查单个参数并决定将其自动转换为多个参数? – 2013-05-15 06:53:02