2014-09-25 65 views
1

我试图从表中获取所有数据,然后使用存储过程清除所有数据。我试过以下内容:Sybase存储过程中的SELECT和TRUNCATE

ALTER PROCEDURE "RD1DTA"."my_procedure"() 
BEGIN 
    SELECT * FROM rd1dta.qrtsp 
    TRUNCATE TABLE rd1dta.qrtsp 
END 

这只会做SELECT,但它不会做TRUNCATE。如果我在SELECT之前执行TRUNCATE,那么它会执行TRUNCATE而不是SELECT。我怎样才能做到这一点?

我正在使用sybase来执行此操作。

+0

你将如何处理选择? (目的是什么) – 2014-09-26 04:56:42

+0

第三方正在使用它。实际的程序看起来比这更复杂。他们通过AJAX请求向我发送一些ID。我将这些ID转储到表中。我使用这些ID来显示他们想要的一些数据(当他们调用这个过程时)。但是他们希望程序也清除这些ID。 – 2014-09-26 06:36:32

+0

这种方法很可能会遇到并发问题(超过1个用户会被炸掉),请阅读:http://sqlblog.com/blogs/paul_white/archive/2012/08/15/temporary-tables-in-stored- procedures.aspx – 2014-09-26 06:43:38

回答

1

丹尼尔,

使用临时表:

ALTER PROCEDURE "RD1DTA"."my_procedure"() 
BEGIN 
    SELECT * INTO #XYZ FROM rd1dta.qrtsp 
    TRUNCATE TABLE rd1dta.qrtsp 
    SELECT * FROM #XYZ 
END 

希望有所帮助。

-Dave

+0

工作。谢谢。 – 2014-10-17 16:18:23