【问题标题】:T-SQL (SQL SERVER) - Rename Database Error MsgT-SQL (SQL SERVER) - 重命名数据库错误消息
【发布时间】:2013-11-29 16:39:55
【问题描述】:

我正在尝试重命名我的数据库,但我不熟悉语法。我尝试了 2 种不同的方法,但收到以下错误消息...

方法一:

DECLARE @old varchar(100)
DECLARE @new varchar(100)
SET @old = 'ver.1'
SET @new = 'ver.2'

DECLARE @query varchar(max)
set @query = 'ALTER DATABASE @old MODIFY NAME = @new'
exec @query

错误:找不到存储过程“ALTER DATABASE @old MODIFY NAME = @new”。


方法二:

DECLARE @old varchar(100)
DECLARE @new varchar(100)
SET @old = 'ver.1'
SET @new = 'ver.2'

ALTER DATABASE @old MODIFY NAME = @new

错误:@old 附近的语法不正确

【问题讨论】:

    标签: sql sql-server sql-server-2008 tsql


    【解决方案1】:

    Stop using exec for dynamic SQL; use sp_executesql。此外,您不能以这种方式将参数化参数内联到ALTER DATABASE - 您需要使用字符串连接。最后,因为您选择在数据库名称中使用非法字符 (.),您需要使用 QUOTENAME 转义这些字符。

    DECLARE @old varchar(100) = 'ver.1';
    DECLARE @new varchar(100) = 'ver.2';
    
    DECLARE @query NVARCHAR(MAX) = N'ALTER DATABASE ' 
      + QUOTENAME(@old) + ' MODIFY NAME = ' + QUOTENAME(@new) + ';';
    
    EXEC sp_executesql @query;
    

    【讨论】:

    • 谢谢先生!非常非常有帮助。
    【解决方案2】:

    我们也可以使用 sp_renamedb 来重命名数据库。

    EXEC sp_renamedb 'old_name' , 'new_name'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-11
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      相关资源
      最近更新 更多