DECLARE @SnapshotName VARCHAR(50)
SET @SnapshotName='ABC_'+Convert(char(10),getdate(),112)
USE ABC
 --Drop snapshot database if it already exists 
IF EXISTS (
SELECT name
FROM sys.databases
WHERE name = @SnapshotName
)
BEGIN
DROP DATABASE @SnapshotName
END@SnapshotName为什么不可以做为数据库名称

解决方案 »

  1.   

    DECLARE @SnapshotName VARCHAR(50),@sql varchar(8000)
    SET @SnapshotName='ABC_'+Convert(char(10),getdate(),112)
    USE master
     --Drop snapshot database if it already exists 
    set @sql='IF EXISTS (SELECT name FROM sys.databases WHERE name = '''+@SnapshotName+''')'
            +'BEGIN DROP DATABASE '''+@SnapshotName+''' END'
    exec(@sql)
      

  2.   


    --改了一下
    DECLARE @SnapshotName VARCHAR(50),@sql varchar(8000)
    SET @SnapshotName='ABC_'+Convert(char(10),getdate(),112)
    USE master
     --Drop snapshot database if it already exists 
    set @sql='IF EXISTS (SELECT name FROM sys.databases WHERE name = '+@SnapshotName+')'
            +' BEGIN DROP DATABASE '+@SnapshotName+' END'
    exec(@sql)--或者DECLARE @SnapshotName VARCHAR(50),@sql varchar(8000)
    SET @SnapshotName='ABC_'+Convert(char(10),getdate(),112)
    USE master
     --Drop snapshot database if it already exists 
    set @sql='IF EXISTS (SELECT name FROM sys.databases WHERE name = '+@SnapshotName+')'
            +' DROP DATABASE '+@SnapshotName
    exec(@sql)
      

  3.   

    不是吧?您看看,这个数据表名可以是变量哦use MyDataBase
    declare @tname varchar(20)
    set @tname='TestScore'
    select * from sysobjects where name=@tname
      

  4.   

    DECLARE @SnapshotName VARCHAR(50)
    SET @SnapshotName='ABC_'+Convert(char(10),getdate(),112)
    USE ABC
     --Drop snapshot database if it already exists 
    IF EXISTS (
    SELECT name
    FROM sys.databases
    WHERE name = @SnapshotName
    )
    BEGIN
     exec 'DROP DATABASE ' +@SnapshotName
    END
      

  5.   


    DECLARE @SnapshotName VARCHAR(50)
    SET @SnapshotName='ABC_'+Convert(char(10),getdate(),112)
    USE ABC
     --Drop snapshot database if it already exists 
    IF EXISTS (
    SELECT name
    FROM sys.databases
    WHERE name = @SnapshotName
    )
    BEGIN
     exec ('DROP DATABASE ' +@SnapshotName)
    END
      

  6.   

    DROP DATABASE @SnapshotName
    END
    @SnapshotName为什么不可以做为数据库名称
    因为红色部分,所以会报错!  用3楼或者5楼的语句去删除,要用动态,exec()