2014-10-30 5 views
-1

Я получаю следующее сообщение об ошибке для моего кода:.Ошибка преобразования не удалось при преобразовании значения VARCHAR к Int

Конверсия удалось при преобразовании значения VARCHAR «(случай, когда ROW_NUM =» к типу данных междунар

?

Что я делаю неправильно

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

Наверняка отсутствует пробел перед тем. –

+2

Вам нужно выполнить 'CAST (@I AS VARCHAR (12))' в вашей конкатенации строк. – gotqn

+0

я изменил код к следующему DECLARE @N INT = 6, я INT = 0, SQL-NVARCHAR (MAX) НАЧАТЬ SET SQL-= '(случай, когда ROW_NUM =' + CAST (@I КАК 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

ответ

0

попробуйте следующее: Вы должны Cast int to varchar и попытаться выполнить отпечатанную SQL для эр ror Probe

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

+0

@ Ошибка вставки VAR здесь –

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 
Смежные вопросы