2010-08-26 2 views
0
SET @DynamicSQL = 'UPDATE U SET U.ADDRESS1 = U.ADDRESS2, U.ADDRESS2 = NULL FROM USER U INNER JOIN EMPOYEE E ON E.USER_ID = U.USER_ID WHERE U.TYPE = ''' + @TYPE + '''' 
EXEC(@DynamicSQL) 
PRINT @DynamicSQL 

Я создаю динамический sql внутри хранимой процедуры, как показано выше. Теперь, когда он выполняется в SP, он печатает правильный SQL-код, который мне нужен, но в строках, обновленных на EXEC, есть «0». Однако, когда я пытаюсь выполнить sql, который генерируется путем печати sql в SP, он показывает мне обновленные 150 строк.Обновленный запрос внутри EXEC не обновляет данные?

Теперь, что может быть причиной того, что EXEC не может обновить строки и напрямую вызывает ПЕЧАТНЫЙ sql?

+0

Я использовал «FROM USER U» в запросе обновления, но вывод, сгенерированный PRINT (@DynamicSql), если я копирую и выполняю непосредственно, он выполняет и обновляет строки. –

ответ

0

Чтобы просмотреть фактическое количество строк, вы можете добавить SELECT @@ ROWCOUNT в конце вашего @DynamicSQL. Также вы можете запустить профайлер и посмотреть, что на самом деле выполняется. У вас есть триггеры на столе?

+0

@ Аниме, что, в конец, была фактическая ошибка? –

0

Если вы выполняете следующий оператор, выводит ли вывод какие-либо обновленные строки?

SET @DynamicSQL = 
    'UPDATE U ' + CHAR(13) + CHAR(10) 
    + 'SET U.ADDRESS1 = U.ADDRESS2 ' + CHAR(13) + CHAR(10) 
    + '  , U.ADDRESS2 = NULL ' + CHAR(13) + CHAR(10) 
    + 'OUTPUT Inserted.* ' + CHAR(13) + CHAR(10) 
    + 'FROM USER U ' + CHAR(13) + CHAR(10) 
    + '  INNER JOIN EMPOYEE E ON E.USER_ID = U.USER_ID ' + CHAR(13) + CHAR(10) 
    + 'WHERE U.TYPE = ' + @TYPE + '''' 
EXEC(@DynamicSQL) 
PRINT @DynamicSQL 
+0

Нет обновлений :( –

+0

Я предполагаю, что при выполнении сгенерированного SQL он выводит строки? Вы просматривали план запроса? Если бы вы могли различать оба плана, это могло бы дать вам ключ. –

Смежные вопросы