我有一个存储过程,我在其中创建了几个临时表。如何获取在该存储过程中创建的临时表的列表?
这样的事情:
SELECT [# temporary table name]
FROM sys.procedures
WHERE name = '<Stored Procedure Name>'
我想要这个结果
Temporary_Table_Name
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#TemporaryTable1
#TemporaryTable2
.
.
.
#TemporaryTableN
(N row(s) affected)
然后,使用该列表,我想动态地构建DROP TABLE指令。
Dinamic_DROP_Instruction
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
IF OBJECT_ID('tempdb..#TemporaryTable1') IS NOT NULL DROP TABLE #TemporaryTable1
IF OBJECT_ID('tempdb..#TemporaryTable2') IS NOT NULL DROP TABLE #TemporaryTable1
.
.
.
IF OBJECT_ID('tempdb..#TemporaryTableN') IS NOT NULL DROP TABLE #TemporaryTableN
(N row(s) affected)
答案 0 :(得分:1)
我能够构造一个代码来获取临时表列表,并设置动态指令来DROP每个临时表(如果存在)。
我留下代码和我所在的来源的链接。
<强> CODE:强>
class foo
{
public:
bar steal_the_moveable_object()
{
return std::move(moveable_object);
}
private:
bar moveable_object;
};
答案 1 :(得分:0)
评论太久......
这并不容易,并且可能需要解析功能。首先,使用OBJECT_DEFINITION
或sp_helptext
或查看sys.sql_modules
或您希望获得定义的其他方法。然后你将不得不根据#或你想要的其他方法搜索你的临时表,并拆分它们。这将是非常混乱和容易出错恕我直言。这是一个开始。
SELECT
SUBSTRING(
OBJECT_DEFINITION(OBJECT_ID('yourProcedure')),
CHARINDEX('#',OBJECT_DEFINITION(OBJECT_ID('yourProcedure'))),
60)
60这里只是一个编号。你想在#或类似之后找到第一个空白区域。同样,我认为除了在您的程序中使用CONTROL+F
并手动添加DROP
语句之外,还有一种快速的方法...