2015-04-22 2 views
-1

Хранимая процедура выдает ошибку:«Неправильный синтаксис рядом с ключевым словом« где ».»

error SQL (error 156) [SQLSTATE 4200] "Incorrect syntax near the keyword 'where'."

Хранимая процедура не успешно заполнить таблицу, используя INSERT заявление, но я получаю эту ошибку, когда он работает. Я не уверен, как исправить ошибку.

Вот прок:

ALTER PROCEDURE [dbo].[BuildTable] 

AS 

declare @QueryTxt as varchar(max) 
declare @QueryName as varchar(50) 
declare @ColumnVal as int 
declare @CountVal as varchar(50) 

declare @isFirst char(1) 
declare @currentDT as varchar(20) 
declare @savdate as datetime 

BEGIN 
set @isFirst = 'Y';    
set @currentDT = convert(varchar(20),current_timestamp,110); 

declare c1 cursor for select queryname, querytext from subsqueries 
open c1 

fetch next from c1 into @queryname, @querytxt 
    while @@FETCH_STATUS = 0 
    begin 
      --call stored proc 
     exec InformixQuery @querytxt, @ColumnVal output 

     set @CountVal = ltrim(str(@ColumnVal)) 
     if @isFirst = 'Y' 
      begin 
      exec ('insert into TblHistory (' + @queryname + ',transdate) values(' + @CountVal + ',' + '''' + @currentDT + '''' + ')') 
      set @isFirst = 'N' 
      end 
     else 
     begin 
      exec ('update TblHistory set ' + @queryname + ' = ' + @CountVal + ' where transdate = ' + '''' + @currentDT + '''') 
     end 
     fetch next from c1 into @queryname, @querytxt  
    end 
close c1 
deallocate c1 
end 
+1

Почему у вас есть mysql с тегами? это, похоже, sql-сервер – Kritner

+2

, пытаясь распечатать ваш оператор обновления exec, а не выполнять его, чтобы подтвердить, что это то, что вы так думаете, и с действительным синтаксисом. – Kritner

ответ

2

Я вижу, что некоторые переменные отсутствуют. Если запретить это, поля queryname выглядят как столбец varchar. Вам нужно окружить @countval кавычками.

exec ('update TblHistory set ' + @queryname + ' = ''' + @CountVal + ''' where transdate = ' + '''' + @currentDT + '''') 
+0

Думаю, вы можете быть здесь. Спасибо за ваш ответ. Я проверю его и примите ваш ответ, если это будет правильно. – Blitz09

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