2013-05-14 140 views
0

我需要做此查詢:SQL錯誤轉換數據類型爲varchar到數字

declare @no as varchar(100)

set @no='11,2,23' 

select * from ft (nolock) where fno in (@no) 

,但有此錯誤的所有時間:錯誤轉換數據類型爲varchar到數字

的FNO是表中的數字

+1

@no被聲明爲varchar,你可以做這樣的Exec('select * from dbo.CM_Address(nolock)'('+ @ no +')'中的ID – bummi 2013-05-14 10:38:44

+1

您應該閱讀關於SQL Server數組中的這篇文章http://www.sommarskog.se/arrays-in-sql -2008.html雖然它可能不會爲您提供確切的T-SQL來解決您的問題,但它肯定會幫助您理解爲什麼當前的SQL不起作用以及如何解決它。 – codingbadger 2013-05-14 10:42:44

+0

以逗號分隔的多個參數與發生*包含*逗號的單個字符串參數之間存在差異。 SQL中的情況與我所能想到的任何其他編程語言一樣。爲什麼你會期望SQL Server檢查單個參數並決定將其自動轉換爲多個參數? – 2013-05-15 06:53:02

回答

4

由於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

0

您可以輕鬆地完成你試圖用一個表變量,而不是僅僅一個varchar變量創建查詢:

declare @t table (
     n int 
) 

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

select 
     * 
from someTable 
where n in (
     select 
      n 
    from @t 
) 
相關問題