【问题标题】:Creating stored proc for select into statements为 select into 语句创建存储过程
【发布时间】:2014-04-10 15:32:31
【问题描述】:

我正在使用 Select 将多个表加载到语句中。现在,我需要创建一个每天运行的作业。我的语法是这样的: 删除表 选择 * 进入 来自

所以它会做什么,它会每天删除表并重新创建它们。这有助于捕捉表格中的任何变化。它们是小桌子,因此不需要很长时间即可删除并再次创建。 有人告诉我我应该为此做一个存储过程,但我不知道存储过程。我正在为大约 50 个表执行 select into 语句。如何为所有这些表编写存储过程?我很困惑,请帮忙!

【问题讨论】:

    标签: sql stored-procedures select-into


    【解决方案1】:

    有不同的方法:

    1.在存储过程中封装作业脚本:在这种方法中,您将创建一个存储过程并将所有插入内容放入其中的脚本中,然后在您的作业中运行此过程,如下所示

    create procedure spCopyMyTables 
    as
    drop table t1
    select * into t1 from Table1
    ...
    drop table t50
    select * into t50 from Table50
    

    2.创建一个drop和select into的过程,在这种方法中你写一个像这样的存储过程

    Create Procedure spMakeCopyOfTable(@tableName varchar(100),@tempTableName varchar(100)) 
    as
       declare @sql nvarchar(max)
       set @sql = 'if object_id('''+@tempTableName+''') is not null Drop table '+@tempTableName
       exec sp_executesql @sql
       set @sql = 'select * into'+tempTableName+' from '+@tableName
       exec sp_executesql @sql
    

    然后你在你的工作中调用这个过程,比如Exec spMakeCopyOfTable('Customers','CopyOFCustomers')

    你也可以像这样结合这两种方法

    create procedure spCopyMyTables 
    as
    Exec spMakeCopyOfTable('Table1','t1')
    Exec spMakeCopyOfTable('Table2','t2')
    ...
    Exec spMakeCopyOfTable('Table50','t50')
    

    希望对你有帮助

    【讨论】:

    • 非常感谢!那么,当您封装它们时,这是否意味着我为多个表所拥有的所有代码都将在一个存储过程下使用?关于第二种方法,它似乎只为一张桌子写的。所以我必须为 50 个表编写 50 个存储过程?那不是50个高管职位吗?对不起,只是一个新手。感谢您的帮助!
    • 我已编辑我的答案以涵盖您在评论中提出的问题
    • 谢谢!只是为了确认:首先为这 50 个表创建存储过程,然后创建存储过程 1 来调用这 50 个表,存储过程 1 将在作业下执行?对?另外,如果将来这 50 个表增加到可能超过 100 个,那么创建超过 100 个存储过程可以吗?
    • 不,你只需要为50或100个表创建2个过程,首先spMakeCopyOfTable这是一个通用的动态过程,然后spCopyMyTables和在你调用spMakeCopyOfTable的正文中你所有的表都通过参数,所以如果你有 100 个表,你只需要将它们添加到 spCopyMyTables
    • 知道了!大大解释了。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多