2012-08-07 78 views
1

我有一个任务存档一些数据库表。为了简化一切,我基本上要做到以下几点:这是用存储过程执行CRUD的正确方法吗?

  1. 从表1检索基于某些条件
  2. 插入这些行插入表中备份数据库
  3. 从表1中删除这些行的某些行

,我要在几个表上执行这些操作。

article告诉我根据不同的CRUD操作(每个CRUD),以创建单独的SP。可以看到,我需要执行的步骤是READ,UPDATEDELETE。然后基于这篇文章,我将为每张表格需要3个SP。所以如果我有10个表需要备份,那么我需要写30个SP?

有人可以告诉我,如果这是正确的做法吗?

感谢。

+1

您是否计划定期执行此任务?如果不是,并且如果所需的表不会经常改变,那么你可以在一个存储过程中完成。如果表格会改变一个相当数量,你可以为每个表格创建一个存储过程。我有一个类似的问题,我只是为每个对象/表创建一个'存档'存储过程。 – XN16 2012-08-07 20:04:34

+0

@AlexTyman,是的,这些任务将定期以Cron作业运行,并且表格会经常更改。所以你建议我为每个表的每个CRUD操作创建单独的存储过程? – czchlong 2012-08-07 20:06:44

回答

2

发言代表我的学习曲线:当我开始与数据库,我也没想那么多的事情我现在要做的。最简单和更“合乎逻辑”的方法是在一个SP中执行CRUD,因为根据你的场景,事情很小。 但是,当涉及到可扩展性时,您确实需要将它们分开。开始编写程序是一个好习惯。 要指出的另一件事是,您可以将更多的订单应用到您的数据库中,效果会更好。

关于必须CRUD 10个表。不,你不需要30个SP(也许你会这样做,但那是不太可能的情况)。您可以使用变量,参数和内容,以便使用参数(表名等)对多个表执行READ操作。与其他CRUD的操作相同。

因此,简而言之:也许你最终不得不只是阅览桌一个大而复杂的SP。但事情就是这样,你一次努力工作,然后再次重复使用。 (这是做了一件好事,它会definetely帮助/保存你在未来,如果你不知道OOP)

+0

我明白你在说什么了,谢谢。我也想到了这个想法,但是各个表格之间的列有所不同。尽管我可以对表名进行参数化,但我如何参数化表列?正如您在我链接的文章中看到的,作者明确指出了所有列名称。 – czchlong 2012-08-07 20:14:29

+0

select column_name,* from information_schema.columns其中table_name ='YourTableName'就是这样做的方式,你可以让他们列出他们,存储他们,然后继续完成任何你需要完成的任务。 – 2012-08-07 20:16:11

+0

在你的'select column_name,*'你的意思是'select column_name。*'?另外,我忘记提及我正在使用Sybase。 – czchlong 2012-08-07 20:18:48

0

考虑一个存储过程来概括某种功能要执行。您正在尝试将表中的数据存档,因此我会调用存储过程dbo.Archive_Table1。 “Archive_”是一个表示过程操作的前缀,后缀是您想要操作的对象(或多个对象)。

对于一个简单的例子,假设你想在那都涉及到关于汽车的数据几个表存档数据。 dbo.Make,dbo.Model,dbo.Sales等。您可以创建一个名为dbo.Archive_Cars的存储过程,该过程作用于所有这些表。足够详细地告诉任何人看它你正在做什么。

在您的新存储过程中,随意做任何你想做的事情。一起插入和删除!它会让你的生活更容易,而不必处理30个SP。当然,以后可能会最终创建一些其他的CRUD SP,但是可以根据需要进行。

你在问题中的提纲是完美的;只需将其转换为代码即可设置。

相关问题