1

使用 CURSOR 创建临时表时出现以下错误:

(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

任何帮助将不胜感激。

4

2 回答 2

0

使用表变量

    Declare @TEMP_Branch TABLE
    (
       FieldID varchar(50)
    )

它作为常规表工作,没有关系,并且不必删除,对于较大的数据处理,制作一个永久表来临时存储数据并在删除或截断它之后

于 2013-02-14T20:54:59.420 回答
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'.
于 2013-02-14T21:11:26.823 回答