【问题标题】:How to modify table name dynamically using INSERT statement in stored procedure如何在存储过程中使用 INSERT 语句动态修改表名
【发布时间】:2016-12-17 23:20:41
【问题描述】:

我有一个存储过程,我在其中使用 Insert 语句插入表中,即

INSERT INTO [dbo].[Development$Call]

我想为生产系统使用相同的存储过程。

是否可以将Development$Call 更改为Production$Call动态 或通过在存储过程中编程

如果我在开发或生产机器上运行相同的存储过程,文本会自动替换到开发或生产的插入语句中

如果可能,请提出建议。如果可能的话,我该如何实现呢?

谢谢

【问题讨论】:

  • 在不同的环境中使用不同的架构是一种不好的做法。
  • 存储过程是一样的,只是我必须替换机器名称.. 所以存储过程在它正在运行的机器上正确执行,方法是在 XXX$Call 中用正确的机器名称替换 XXX

标签: sql sql-server database tsql stored-procedures


【解决方案1】:

您可以创建如下映射表。

MAPPINGTABLE

**ServerName    Environment**
PRODServer  PRODUCTION
DEVServer   DEVELOPMENT

将此 sn-p 添加到您的存储过程中。 @@Servername 返回当前的服务器名。将此传递给您的映射表以获取环境。

IF (SELECT Environment from MappingTable where ServerName=@@SERVERNAME)='DEVELOPMENT'
INSERT INTO [dbo].[Development$Call]
....
ELSE
INSERT INTO [dbo].[Production$Call]
....

【讨论】:

  • 我有 7 台服务器,所以在这个解决方案中,我将有一个很长的存储过程,只是重复插入语句,然后在所有服务器上复制这个存储过程。难道不能只替换 XXX$Call使用@Servername
  • @user271762 是的,这是可能的,但它需要使用 T-SQL 创建一个临时变量并运行 EXEC()。你最好将你的开发环境和生产环境分离到单独的数据库中,所有表的名称都相同。
  • 是的,我有用于开发和生产以及其他系统的单独数据库。我只需要在所有这些上运行相同的脚本。通过在插入语句中用表替换服务器名称。
  • @MrAnderson 你能举个例子吗.. 谢谢
  • @user271762 你有单独的服务器很好,但正如我其余的评论所说,跨环境命名相同的表将解决你的问题。为什么叫你的桌子[Development$Call] 为什么不简单地[Call]?。你会知道它是在哪个服务器上开发/生产的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-26
  • 1970-01-01
相关资源
最近更新 更多