На основании только что введенного кода вы не указали инструкцию 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
Наверняка отсутствует пробел перед тем. –
Вам нужно выполнить 'CAST (@I AS VARCHAR (12))' в вашей конкатенации строк. – gotqn
я изменил код к следующему 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