【问题标题】:Create DB Name from SELECT从 SELECT 创建数据库名称
【发布时间】:2018-06-06 08:25:44
【问题描述】:

我正在尝试创建 SQL 脚本以将旧数据移动到单独的数据库中。 我现在遇到的问题是我想从 SELECT 语句中命名数据库。

use DBName;
declare @release varchar(max)
set @release = concat('Release_',(select MetaRevision from metarevision))
select @release

if db_id(@release) is null create database @release

很遗憾,这不起作用。我收到以下错误:

Incorrect syntax near '@release'

有没有办法从 Select 语句中命名数据库?

【问题讨论】:

  • exec ('create database ' + quotename(@release)) 或类似的东西。
  • 解释原因:create database 的参数是 name,而不是 string/varchar。换句话说,create database XYZ 是正确的,而 create database 'XYZ' 不是 - 这就是为什么也不允许使用 create database @release .
  • as @ta.speot.is 建议您为此需要动态 SQL
  • 有解决方法吗? 'quotename' 不起作用。
  • declare @release nvarchar(10) = 'abc'; declare @sql nvarchar(100) = 'create database ' + quotename(@release); exec (@sql); 或类似的东西。

标签: sql-server tsql


【解决方案1】:

感谢您的帮助。我用ta.speot.is和p.campbell的信息找到了解决方案。

对于未来,这是解决方案:

use DBName;
declare @release varchar(14)
set @release = concat('Release_',(select MetaRevision from metarevision))

declare @quoted varchar(16);
set @quoted =  quotename(@release);

if db_id(@release) is null exec ('create database ' + @quoted)

【讨论】:

    【解决方案2】:

    你可以这样做

    declare @release varchar(max)
    set @release = concat('Release_','TestOst') //Replace TestOst with your metadata
    select @release
    
    if db_id(@release) is null 
    
    declare @SQL nvarchar(max)
    
    SET @SQL = 'create database '+quotename(@release)
    
    exec(@SQL)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-02
      • 1970-01-01
      • 2010-10-30
      • 2020-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-03
      相关资源
      最近更新 更多