声明的表变量上的动态 Select 语句 - SYBASE

Posted

技术标签:

【中文标题】声明的表变量上的动态 Select 语句 - SYBASE【英文标题】:dynamic Select statement on declared table variable - SYBASE 【发布时间】:2017-04-18 07:18:17 【问题描述】:

我在存储过程(sybase 数据库)中有一个声明的表变量。根据需要在该表中填充数据。但现在我想根据不同的条件选择特定的列。我正在尝试使用动态 SQL 来做同样的事情但不起作用。它可以像我假设的那样发展吗?

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”或必须声明表变量“@tableData”。

【问题讨论】:

【参考方案1】:

修改代码:

declare @tableData as table (

收件人:

CREATE TABLE #tableData (

将引用从 @tableData 更改为 #tableData

临时表将一直存在,直到当前会话或过程结束,或者直到您使用 drop table 删除它。

【讨论】:

【参考方案2】:

删除“table”之前的关键字“as”

【讨论】:

以上是关于声明的表变量上的动态 Select 语句 - SYBASE的主要内容,如果未能解决你的问题,请参考以下文章

oracle 隐式游标,显示游标,游标循环,动态SELECT语句和动态游标,异常处理,自定义异常

存储过程变量中存储SQL语句被截断的问题

mysql中查询语句的表名,是不是可以动态选择表名像这样

我们可以在 xslt 的 select 语句中使用动态变量名吗?

用动态SQL语句给变量赋值

sql select语句作为动态plsql块的绑定变量