【问题标题】:Renaming database prefix to always be previous month将数据库前缀重命名为始终为上个月
【发布时间】:2016-09-12 12:26:46
【问题描述】:

我正在使用 SSMS 2012 并试图找出一种编写查询的方法,以便我的数据库名称将调整为当前月份的倒数第二个。

我们每个月都有帐单数据库,例如 BillingMonth01206BillingMonth022016,还有一个称为 BillingMonthLM 的“上个月”。 LM 数据库很好,因为我们不必为上个月的数据不断更改数据库,但我总是需要在那之前的那个。所以现在是 9 月,我需要 7 月的账单 (BillingMonth072016)。

我每个月都在进行查找和替换,但是有没有办法自动配置呢?也许使用字符串或其他东西?

【问题讨论】:

  • 您应该将数据加载到单个报告数据库/表中,而不是重命名数据库。无论如何,您最终都会遇到问题,因为您可能还需要重命名基础文件。
  • 数据库名称不应更改。我可以看到您可能会将每月快照移到哪里进行报告,但数据库不应该如此短暂。
  • 感谢您的及时回复。每个数据库中的基础表都相同,因此不会影响表名。我只需要每个月引用一个不同的数据库。我无法更改服务器或数据库的结构,所以这是我唯一的选择。
  • 最好使用YYYYMM格式(201607)。
  • 您可以自动查找和替换。

标签: sql sql-server database ssms-2012


【解决方案1】:
 DECLARE  
       @Month varchar(2)
      ,@Year varchar(4)
      ,@SQL varchar(max)
      ,@DataBaseName varchar(50)

 SET @Month = CONVERT(varchar(2), DATEPART(MONTH, GETDATE()))
 SET @Year = DATEPART(YEAR, GETDATE())

 IF (LEN(@Month) = 1)
      SET @Month = '0' + @Month

 SET @DataBaseName = 'BillingMonth' + @Month + @Year

 SET @SQL = 'ALTER DATABASE BillingMonth072016  
             Modify Name = ' + @DataBaseName + '' 

 EXEC (@SQL)

【讨论】:

  • 如果您使用此查询,您可能能够实现您想要的,但您必须拥有数据库的 Alter 权限。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 2014-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多