sqlserversql语句不支持虚拟表问题

DECLARE @tb1 Table(

SYB varchar(max)

)

insert into @tb1(SYB)select '测试' as 测试

select *From  @tb1

执行后,说没有返回结果集

SQL yzmJcF8z0065873 发布于 2022-11-28 14:50
1min目标场景问卷 立即参与
回答问题
悬赏:0 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
用户CKn4B8768Lv2见习互助
发布于2022-11-30 21:46

一、虚拟表在存储过程中可以使用的,写存储过程, 如下:

    create procedure virtual

    as

    begin

    create table #tab1(

    syb nvarchar(max)

    )

    insert into #tab1 values('测试')

    select * from #tab1

    drop table #tab1

    end 

    

    执行存储过程, , execute virtual 

        返回需要的结果集 

    

第二种办法,使用 with as

     with tab1

     as

    (selct '测试’ syb )

    select * from tab1 

  • yzmJcF8z0065873 yzmJcF8z0065873(提问者) 好的,感谢,第一种的话,在存储过程是可以的,但是在设计器中打开运行这个存储过程就会报没有返回结果集语句,我这边使用的数据库是sql server ,不太确定是不是不支持。设计器版本是10.0
    2022-12-13 18:02 
  • 用户CKn4B8768 用户CKn4B8768 回复 yzmJcF8z0065873(提问者) 那就要第二种
    2022-12-15 15:40 
  • yzmJcF8z0065873 yzmJcF8z0065873(提问者) 回复 用户CKn4B8768 加一个SET NOCOUNT ON 这个就可以了
    2022-12-22 14:58 
最佳回答
0
linbodingLv6中级互助
发布于2022-11-28 14:52

可以尝试用with as  的语法,这个能取到类似的效果

最佳回答
0
yzm339714Lv6中级互助
发布于2022-11-28 14:53(编辑于 2022-11-28 14:54)

你要这种的话,需要写到存储过程里面,然后帆软执行存储过程或者像楼上那种方法一样 , 帆软的sql里面不支持 declare 定义变量

  • yzmJcF8z0065873 yzmJcF8z0065873(提问者) 好的,谢谢,存储过程里面也不行, declare 定义变量 这个可以的,这个我试过了,这个要关闭一下那个sql 防注入
    2022-11-28 15:04 
  • yzmJcF8z0065873 yzmJcF8z0065873(提问者) 给我感觉就是帆软里面的sql ,没有区别sql参数和虚拟表,都是@xx
    2022-11-28 15:06 
  • 4关注人数
  • 276浏览人数
  • 最后回答于:2022-11-30 21:46
    请选择关闭问题的原因
    确定 取消
    返回顶部