none
T-SQL Базу данных в переменную RRS feed

  • Вопрос

  • Добрый день,  принимает строковое значение а не выбирает базу данных, подскажите как правильно?

    Declare @DB nvarchar(250)
    Set @DB = 'MyDB'     --Здесь должно быть имя базы данных
    DECLARE @SQLText nvarchar(max)
    SET @SQLText = 'USE ' + @DB

    Как мне в переменную занести use MyDB? Кажется все просто), а вопросы возникают

    use MyDB

    ALTER DATABASE MyDB SET RECOVERY SIMPLE 


    19 декабря 2016 г. 7:47

Ответы

  • начиная с 2012 SQL Server такое прокатит:

    USE MyDB
    GO
    
    DECLARE @MyDB_log nvarchar(max)
    SET @MyDB_log=(SELECT name FROM sys.database_files where type_desc='LOG')
    
    IF (select size*8 as SIZE_KB from sys.database_files 
    where type_desc='LOG') > 5*1024*1024
    BEGIN 
     ALTER DATABASE CURRENT SET RECOVERY SIMPLE 
     DBCC SHRINKFILE (@MyDB_log, 1024); 
     ALTER DATABASE CURRENT SET RECOVERY FULL
    
    END
    GO

    • Помечено в качестве ответа Vladimir Sizasko 20 декабря 2016 г. 8:44
    20 декабря 2016 г. 7:57

Все ответы

  • А какая у вас задача? Use в динамическом SQL работает, но только на время выполнения "динамического" куска кода - потом контекст возвращается.
    19 декабря 2016 г. 17:29
  • Хотел сделать универсальный скрипт на все случаи жизни, в одном месте поменять переменную, а именно название базы данных занести в переменную:

    Declare @DB nvarchar(250)

    Set @DB = 'MyDB'     --Здесь бы я в одном месте менял название базы данных

    USE @MyDB
    GO

    IF (select size*8 as SIZE_KB from sys.database_files 
    where type_desc='LOG') > 5*1024*1024

    BEGIN

    ALTER DATABASE @MyDB SET RECOVERY SIMPLE 
    DBCC SHRINKFILE (@MyDB_Log, 1024); 
    ALTER DATABASE @MyDB SET RECOVERY FULL

    END;
    GO

    20 декабря 2016 г. 1:13
  • Вы можете делать запрос из полностью специфицированного имени @MyDB.sys.database_files (тоже dynamc sql)
    Если скрипт для sqlcmd, то у него есть параметр -d
    Есть sp_MSforeachdb
    20 декабря 2016 г. 6:43
  • начиная с 2012 SQL Server такое прокатит:

    USE MyDB
    GO
    
    DECLARE @MyDB_log nvarchar(max)
    SET @MyDB_log=(SELECT name FROM sys.database_files where type_desc='LOG')
    
    IF (select size*8 as SIZE_KB from sys.database_files 
    where type_desc='LOG') > 5*1024*1024
    BEGIN 
     ALTER DATABASE CURRENT SET RECOVERY SIMPLE 
     DBCC SHRINKFILE (@MyDB_log, 1024); 
     ALTER DATABASE CURRENT SET RECOVERY FULL
    
    END
    GO

    • Помечено в качестве ответа Vladimir Sizasko 20 декабря 2016 г. 8:44
    20 декабря 2016 г. 7:57