【问题标题】:ALTER current database without using its nameALTER 当前数据库而不使用其名称
【发布时间】:2014-11-20 23:24:08
【问题描述】:

我需要在当前数据库 (ALTER DATABASE...) 上运行更新脚本,但不能使用隐含的名称。是否可以使用某些函数来获取当前的数据库名称并在ALTER DATABASE(Sql Server 2005 及更高版本)中使用?我尝试使用db_name(),但不起作用。

select db_name(); 有效

ALTER DATABASE db_name() ... 不起作用

【问题讨论】:

    标签: sql-server sql-server-2005


    【解决方案1】:

    实际上,如果您要更改当前数据库,则更像这样的东西可能会更好一些:

    ALTER DATABASE CURRENT SET COMPATIBILITY_LEVEL = 90

    【讨论】:

    • 这是最简洁的答案,但请注意,这只适用于 SQL Server 2012 及更高版本。原始问题标记为 SQL Server 2005。请参阅stackoverflow.com/questions/19238834/…
    • @AdrianEdwards,是的,但它也是谷歌搜索时的第一击,sql server alter database current database。 :)
    • 在 MySQL 中,如果您当前在该数据库中,“CURRENT”可以省略 - 例如,ALTER DATABASE CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
    【解决方案2】:

    你需要使用类似的东西

    declare @dbname varchar(100)
    set @dbname=quotename(db_name())
    exec('alter database '+@dbname+' ...');
    

    或者……甚至更简单

    set @sql='alter database '+quotename(db_name())+' ...';
    exec(@sql)
    

    【讨论】:

    • 我认为是在同一个数据库上的操作,这里有一些对你有用的东西blog.sqlauthority.com/2010/02/11/…
    • @Raj - 当我第一次输入这个时,我假设我可以在表达式中使用函数 db_​​name() ,但它需要先转换为 varchar。我将对此进行编辑以反映这一点。
    • @Rich - 酷哥们。我们一直都是新事物,不是吗:)
    • @BenThul 是的,好点,在两个解决方案中都添加了 quotename 函数。
    • 这个问题被标记为“sql-server”,但对于未来对 mysql 感兴趣的观众回答:可以简单地省略数据库名称(例如 ALTER DATABASE CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; )。
    【解决方案3】:

    试试这个

    DECLARE @DBName sysname;
    SET @DBName = (SELECT db_name());
    DECLARE @SQL varchar(1000);
    SET @SQL = 'ALTER DATABASE '+@DBName+' .......'
    

    拉吉

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-23
      • 2015-09-07
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多