我需要做此查詢:SQL錯誤轉換數據類型爲varchar到數字
declare @no as varchar(100)
set @no='11,2,23'
select * from ft (nolock) where fno in (@no)
,但有此錯誤的所有時間:錯誤轉換數據類型爲varchar到數字
的FNO是表中的數字
我需要做此查詢: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))
+1很棒。聲明中的XML語法對我來說仍然是巫術。 – 2013-05-14 10:49:34
您的+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