2017-04-18 106 views
0

我在存储过程(sybase数据库)中有一个声明的表变量。根据需要在该表中填入数据。但是现在我想根据不同的条件选择特定的列。我正在尝试动态SQL来做同样的事情,但不工作。它能像我所假设的那样走吗?声明表变量动态Select语句 - SYBASE

ALTER PROCEDURE "dbo"."sp_userMenus" 
@fundName VARCHAR(20) , @userName VARCHAR(20) 
AS 
BEGIN 
declare @tableData as table (
     id int IDENTITY(1,1), 
     [menuDisplayName] nvarchar(100), 
     [menuOrder] int, 
     [menuType] nvarchar(100), 
     [parentVerticalMenu] nvarchar(100), 
     [parentHorizontalMenu] nvarchar(100), 
     [groupID] int, 
     [inDashboardAll] int, 
     [inDashboardOverview] int, 
     [inDetail] int, 
     [inSummary] int, 
     [isDetail] int, 
     [zOrder] int 
    ) 

    --insert into @tableData 

    if @userName = 'ADMIN' 
     SET @SQLQuery = 'select * 
      from @tableData order by parentVerticalMenu, parentHorizontalMenu' 
    else 
     SET @SQLQuery = 'select menuDisplayName,menuOrder,menuType,parentVerticalMenu,parentHorizontalMenu 
      from @tableData order by parentVerticalMenu, parentHorizontalMenu' 

    EXEC sp_executesql @SQLQuery 

END 

得到错误“必须声明标量变量 “@tableData” OR必须声明表变量 “@tableData”。

回答

0

删除关键字 '为' 前 '表'

0

更改代码:

declare @tableData as table (

要:

CREATE TABLE #tableData (

变化从@tableData#tableData

引用的临时表将一直存在,直到当前会话或过程结束,或直至它你把它用DROP TABLE。