2013-02-13 2 views
1

я получил следующее сообщение об ошибке при использовании курсора при создании временных таблиц:SQL Server, ошибка 102, при использовании курсора, создавая динамическую таблицу

(1 row(s) affected) 
Msg 102, Level 15, State 1, Line 1 
Incorrect syntax near '?'. 
Msg 208, Level 16, State 0, Line 33 
Invalid object name '##TEMP_Branch'. 

без CURSOR все работает отлично. Вот весь код:

declare @TableSchema table 
(
    Id Int Identity(1,1), 
    Name nVarchar(50), 
    DataType nVarchar(50) 
) 

declare @reportid uniqueidentifier 
set @reportid = '597d37c0-563b-42f0-99be-a15000dc7a65' 
declare @ttl nvarchar(100) 
declare cur CURSOR LOCAL for 
    SELECT title 
    FROM   ReportItems 
    where reportid = @reportid 
    and del = 0 
    ORder by so 
open cur 
    fetch next from cur into @ttl 
    while @@FETCH_STATUS = 0 BEGIN 
     INsert @TableSchema Values(@ttl,'nVarchar(max) NULL') 
    fetch next from cur into @ttl 
    end 
close cur 
deallocate cur 

Declare @Statement Varchar(1000) 
Select @Statement = 'Create Table [##TEMP_Branch](FieldID Varchar(50)' 
Select @Statement = COALESCE(@Statement +',','') + Name + ' ' + DataType from @TableSchema 
Select @Statement = @Statement + ')' 
EXEC(@Statement) 


Select * from ##TEMP_Branch 
drop table ##TEMP_Branch 

Любая помощь будет высоко оценен.

+1

Возможно, что-то не так с динамическим запросом. Можете ли вы не использовать PRINT перед или вместо того, чтобы выполнять его и посмотреть, что происходит? –

ответ

0

использовать таблицу varible

Declare @TEMP_Branch TABLE 
    (
     FieldID varchar(50) 
    ) 

это работать как обычная таблицу, без связи, и не должно падать, для процесса данных лагера, сделать постоянную таблицу для временного хранения данных и после того, как deleto или укоротить его

0

Возможно, у вас есть заголовок в таблице ReportItems, в котором есть пробел или другой плохой символ (знак вопроса).

Первая ошибка выглядит так, как будто она выходит из EXEC(@Statement), потому что определение таблицы неверно.

Msg 102, Level 15, State 1, Line 1 
Incorrect syntax near '?'. 

Вторая ошибка, вероятно Select * from ##TEMP_Branch выполняется на временную таблицу, которая не существует:

Msg 208, Level 16, State 0, Line 33 
Invalid object name '##TEMP_Branch'. 
Смежные вопросы