как написать универсальный скрипт без явного написания имени базы данных, когда это обязательный параметр - PullRequest
1 голос
/ 13 июля 2010

Мне нужно запустить скрипт типа

EXEC sp_dbcmptlevel AdventureWorks, 100;
GO

Теперь я хотел бы иметь универсальную версию, которая использует базу данных, к которой я подключен, возможно ли это в T-SQL?

Как-то так, но это не работает:

EXEC sp_dbcmptlevel DBNAME(), 100;
GO

Конечно, это не работает, потому что возвращается строка, я хотел бы вернуть ссылку на базу данных ... Возможно ли это?

Примечание. Конечно, я могу сделать это из клиентского приложения и использовать параметр, например (пример Delphi)

EXEC sp_dbcmptlevel :CurrentDatabase, 100;
GO

и заменить его во время выполнения, но я бы хотел иметь код только на T-SQL.

Ответы [ 2 ]

2 голосов
/ 13 июля 2010

Вы можете использовать подход EXEC.

declare @x nvarchar(2000)
set @x = 'alter database [' + DB_NAME() + '] set compatibility_level = 100;'
exec (@x)

BOL 2008 объявляет, что sp_dbcmptlevel устарела, и вместо этого использует ALTER DATABASE. Я не знаю, поддерживает ли это 2005 или нет.

1 голос
/ 13 июля 2010

Вы можете попробовать

DECLARE @dbname AS nvarchar(500)
set @dbname = db_name()
exec sp_dbcmptlevel @dbname, 100;

Ваш сервер должен, конечно, поддерживать уровень совместимости, который вы пытаетесь установить ..

Вы также должны взглянуть на это http://msdn.microsoft.com/en-us/library/ms178653.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...