2014-10-30 58 views
-1

我得到了我的代碼以下錯誤,當失敗:轉換爲varchar值時錯誤轉換轉換爲varchar值爲int

轉換失敗「(CASE WHEN ROW_NUM =」數據類型爲int

我在做什麼錯

DECLARE @N   INT = 6, 
     @I   INT = 0, 
     @SQL  NVARCHAR(MAX) 


BEGIN 
SET @SQL = '(CASE WHEN ROW_NUM = '[email protected]+'THEN problem ELSE NULL END) '; 
SET @I = @I+1; 
END 

EXEC SP_EXECUTESQL 
    @SQL 
+3

當然,在THEN之前缺少一個空格。 – 2014-10-30 14:26:46

+2

你需要在你的字符串連接中使用'CAST(@I AS VARCHAR(12))'。 – gotqn 2014-10-30 14:27:38

+0

我改變了代碼爲以下DECLARE @N INT = 6, I INT = 0, SQL NVARCHAR(MAX) BEGIN SET SQL = '(CASE WHEN ROW_NUM =' + CAST(@I AS VARCHAR( 12))+'THEN DX_NAME ELSE NULL END)'; SET I = @ I + 1; END EXEC SP_EXECUTESQL SQL和獲取跟隨錯誤「Msg 156,Level 15,State 1,Line 1 關鍵字'CASE'附近的語法不正確。 – Var 2014-10-30 14:38:54

回答

0

試試這個:你需要Cast int to varchar並嘗試執行SQL印製爲ER ror探針

DECLARE @N   INT = 6, 
     @I   INT = 0, 
     @SQL  NVARCHAR(MAX) 


BEGIN 

    SET @SQL = '(CASE WHEN ROW_NUM = '+CAST(@I as VARCHAR(10))+' 
    THEN problem ELSE NULL END) '; 
SET @I = @I+1; 
END 
print @SQL 
EXEC SP_EXECUTESQL @SQL 
+0

@ganesh_develkar我試着運行你的代碼,我得到以下錯誤。 「(CASE WHEN ROW_NUM = 0 THEN problem ELSE NULL END) Msg 156,Level 15,State 1,Line 1 關鍵字'CASE'附近的語法錯誤 」 – Var 2014-10-30 14:51:28

+0

@Var粘貼錯誤 – 2014-10-30 14:51:56

1

根據您發佈的代碼,您缺少SELECT語句和FROM子句。你也假設你有一個名爲列和ROW_NUM一列名爲problem

DECLARE @N   INT = 6, 
     @I   INT = 0, 
     @SQL  NVARCHAR(MAX) 


BEGIN 

    SET @SQL = 'SELECT CASE WHEN ROW_NUM = '+CAST(@I as VARCHAR(10))+' 
    THEN problem ELSE NULL END FROM MyTable'; 
SET @I = @I+1; 

END 
print @SQL 
EXEC SP_EXECUTESQL @SQL 

但是,它也像你想不實際定義WHILE,你會做執行WHILE循環像這樣:

DECLARE @N   INT = 6, 
     @I   INT = 0, 
     @SQL  NVARCHAR(MAX) 

WHILE @I <= @N -- new code 

BEGIN 
    SET @SQL = 'SELECT CASE WHEN ROW_NUM = '+CAST(@I as VARCHAR(10))+' THEN problem ELSE NULL END FROM MyTable'; 
    SET @I = @I+1; 
    PRINT @SQL 
    EXEC SP_EXECUTESQL @SQL 
END 

我想你實際上是在尋找這樣的事情:

SELECT 'Problem', * 
FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY ROW_NUM) rn FROM MyTable) s 
WHERE rn <> ROW_NUM 

帶有虛擬數據的樣本:

DECLARE @MyTable TABLE (ROW_NUM INT, SomeData VARCHAR(5)) 
INSERT INTO @MyTable (ROW_NUM, SomeData) VALUES (1, 'foo') 
INSERT INTO @MyTable (ROW_NUM, SomeData) VALUES (2, 'zip') 
INSERT INTO @MyTable (ROW_NUM, SomeData) VALUES (3, 'yak') 
INSERT INTO @MyTable (ROW_NUM, SomeData) VALUES (5, 'lop') 
INSERT INTO @MyTable (ROW_NUM, SomeData) VALUES (6, 'cow') 
INSERT INTO @MyTable (ROW_NUM, SomeData) VALUES (7, 'moo') 


SELECT 'Problem', * 
FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY ROW_NUM) rn FROM @MyTable) s 
WHERE rn <> ROW_NUM