【问题标题】:altering a table whose name is in a variable更改名称在变量中的表
【发布时间】:2011-08-23 15:01:06
【问题描述】:

我有一种情况,我需要从一个存储过程为几个不同的客户端生成一个表。这些表都有相同的核心价值,但有时它们有额外的列。

我不想每次都复制和粘贴那些生成 SQL 的表,所以我当前的设置是我有一个返回核心列的存储过程,它被加载到 ##TempTableClientName 中(这是必要的,因为它是访问这些的外部应用程序以及发送到服务器的每个命令似乎都被视为不同的连接,因此标准会话临时表似乎无法完成这项工作)。

我现在想运行第二个存储过程来更新该临时表以添加到新列中。可能会有几个这样的程序,并且在某些情况下它们可能会被共享。为此,为了分享它们,我需要以某种方式告诉它要更新哪个##table。

我目前的选择似乎是:

我可以将它作为字符串传递并使用动态 sql,但这看起来很乱。

我可以为每个客户端强制执行一个存储过程,然后可以将表名(每个客户端的)硬编码到该过程中。这似乎有可能用于非最佳代码(即许多非常相似甚至相同的过程)。

谁能提出比这些更好的选择?目前我正在考虑第二个,因为没有大量的客户,这似乎是最简单的做事方式。不过我想要一些更好的选择...我希望可能有一些函数或某些东西会接受一个字符串并获取该名称的表对象...

【问题讨论】:

    标签: sql sql-server-2005 stored-procedures


    【解决方案1】:

    我的最终解决方案只是重构我的代码以使我的核心过程返回可用于任何客户端的所有列。这意味着它通常会返回不相关(或为空)的数据。如果新客户端需要额外的列,如果假定给定的列数,某些代码可能需要更新,此方法也会导致潜在的问题。

    不幸的是,这不是一个好的解决方案,但由于缺乏其他选择,我选择了它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多