Cha*_*bel 5 sql sybase temp-tables
有没有办法在sybase中获取临时表的列列表?假设我有一个名为#mytable的表
select count (*) from tempdb..#mytable
Run Code Online (Sandbox Code Playgroud)
返回145表示此表中有145行.我尝试了以下(有一些变化)
select so.name from tempdb..syscolumns sc inner join tempdb..sysobjects so on sc.id = so.id where so.name = '#mytable'
Run Code Online (Sandbox Code Playgroud)
也试过了
select so.name from tempdb..syscolumns sc inner join tempdb..sysobjects so on sc.id = so.id where so.name = 'tempdb..#mytable'
Run Code Online (Sandbox Code Playgroud)
两人都回来了,结果空洞.
有任何想法吗?在sybase中获取临时表的列名的任何其他原语?
抱歉,我没有 Sybase 来尝试这个。然而,我可以给你我认为的答案,但你可能需要一些努力才能获得正确的语法。基本上,根据文档,您可以sp_help在临时表上使用该命令,只要您从tempdb. 以下是 Sybase 的引述:
仅当从 tempdb 调用临时表时,诸如 sp_help 之类的系统过程才对临时表起作用。
以下是使用 sp_help 命令的方法:
该OBJECT_ID(tempdb..#mytable)命令不起作用的原因是该表中不存在该表名。原因是 Sybase 确保所有临时表都是唯一的。为此,它获取临时表名称(包括井号)并将其截断为 13 个字符,附加下划线以使其达到 13 个字符(以防它很短),并向临时表名称添加一个 17 位会话 ID。表名的末尾。这样,您可以拥有一个名为 #mytable 的临时表,而另一个用户(甚至您在另一个会话中)可以拥有与临时表完全相同的名称,而不会造成冲突。如果您知道了会话 ID,则可能可以构建临时表名称。如果您构建了临时表名称,则可以将其分配给一个变量(例如@newTableName)并使用该SELECT name FROM tempdb..syscolumns WHERE id = OBJECT_ID(@newTableName)方法来检索临时表列。