代码之家  ›  专栏  ›  技术社区  ›  UnDiUdin

当数据库名称是强制参数时,如何在不显式写入数据库名称的情况下编写通用脚本

  •  1
  • UnDiUdin  · 技术社区  · 14 年前

    我需要运行一个脚本

    EXEC sp_dbcmptlevel AdventureWorks, 100;
    GO
    

    现在我想要一个使用我连接到的数据库的通用版本,在T-SQL中是否可能?

    像这样,但这不起作用:

    EXEC sp_dbcmptlevel DBNAME(), 100;
    GO
    

    当然不起作用,因为返回了一个字符串,我想让数据库referece返回…有可能吗?

    注意:当然,我可以从客户机应用程序和使用参数来完成这项工作,比如(Delphi示例)

    EXEC sp_dbcmptlevel :CurrentDatabase, 100;
    GO
    

    并在运行时替换它,但我希望只有T-SQL代码。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Neil Moss    14 年前

    您可以使用exec方法。

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

    BOL2008声明不推荐使用sp_bcmptlevel,而是使用alter database。我不知道2005年是否支持这一点。

        2
  •  1
  •   Gabriele Petrioli    14 年前

    你可以试试

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

    当然,您的服务器必须支持您尝试设置的兼容级别。

    你也应该看看这个 http://msdn.microsoft.com/en-us/library/ms178653.aspx