SQL脚本在线或离线使用Microsoft Sql数据库?

时间:2009-05-11 07:29:22

标签: sql sql-server-2008 offline

如果我想离线或在线使用MS Sql 2008,我需要使用GUI - >数据库任务 - 在线或离线。

可以用一些sql脚本完成吗?

4 个答案:

答案 0 :(得分:11)

ALTER DATABASE database-name SET OFFLINE

如果在连接用户或进程时运行ALTER DATABASE命令,但您不希望阻止该命令,则可以使用NO_WAIT选项执行该语句。这会导致命令失败并显示错误。

ALTER DATABASE database-name SET OFFLINE WITH NO_WAIT

在线通讯:

ALTER DATABASE database-name SET ONLINE

答案 1 :(得分:3)

-- Take all user databases offline
CREATE PROCEDURE SP_TakeOfflineAllDatabase AS
BEGIN
    DECLARE @db sysname, @q varchar(max);
    DECLARE cur_db CURSOR FOR
        SELECT name FROM sys.databases WHERE owner_sid<>0x01;
    OPEN cur_db;
    WHILE 1=1
    BEGIN
        FETCH NEXT FROM cur_db INTO @db;
        IF @@FETCH_STATUS <> 0
            BREAK;
        SET @q = N'ALTER DATABASE [' + @db + N'] SET OFFLINE WITH NO_WAIT';
        EXEC(@q);
    END;
    CLOSE cur_db;
    DEALLOCATE cur_db;
END;

在运行该过程之前重新启动服务器。它将关闭与数据库的现有连接。

答案 2 :(得分:2)

这是一个可能对您非常有用的注释: 几乎总是可以在幕后看到GUI正在做TSQL的事情。

c:http://www.mssqltips.com/tip.asp?tip=1505

答案 3 :(得分:1)

我知道这是一个旧帖子,但是,万一有人遇到这个解决方案,并且更喜欢一个非游标方法,它不会执行但会返回脚本。 我刚刚采用了之前的解决方案并将其转换为基于结果构建的选择。

DECLARE @SQL VARCHAR(8000)

SELECT @SQL=COALESCE(@SQL,'')+'ALTER DATABASE  '+name+ N' SET OFFLINE WITH NO_WAIT;
    '
FROM sys.databases
WHERE owner_sid<>0x01
PRINT @SQL