我正在尝试创建一个引用临时表的sybase存储过程,但我不知道这个临时表的定义。我可以查看proc并找出临时表的样子并首先手动创建它,但是我面临大约1000次触发(引用各种临时表),这个解决方案非常繁琐。
我一直在寻找更具战略性的方法,但到目前为止还没有运气。如果你能和我分享你的想法,我会很感激。
答案 0 :(得分:3)
看来你可能不明白#table的重点是:
这是暂时的
它仅存在于创建它的存储过程的上下文中
是私人的
因此,创建一个新的存储过程来“引用”另一个过程的#table,这是不合理的尝试。 要么写一个完全独立的存储过程,用自己的#table,或更改原始存储过程,以便临时表存在于其上下文之外(见下文)。
你必须跳过不同版本的Sybase的箍和不同的箍,以获得#tables中的定义或数据。
sa
权限,你当然可以通过SybaseCentral查看DDL或其他DBA工具。如果您正在执行文档练习,那么除了检查sproc代码之外别无选择;如果你不这样做,你将会错过隐藏在代码中的#table的重要方面。
对于意图要共享的临时表(即存在于存储过程的上下文之外),而不是:
CREATE TABLE #my_table ...
用途:
CREATE TABLE tempdb..my_table ...
并在编译过程之前执行外部任何过程。
答案 1 :(得分:0)
我认为您可以从tempdb systables和syscolumns表中获取#table元数据。
请看Rob Verschoor关于#table名称和tempdb转储加载技巧的文章http://www.sypron.nl/temptab.html。