如何编写通用脚本,而不是在必需参数时显式写入数据库名称

时间:2010-07-13 14:36:14

标签: sql-server delphi tsql

我需要运行像

这样的脚本
EXEC sp_dbcmptlevel AdventureWorks, 100;
GO

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

这样的东西,但这不起作用:

EXEC sp_dbcmptlevel DBNAME(), 100;
GO

它当然不起作用,因为返回了一个字符串,我想要返回数据库引用...是否可能?

注意当然我可以从客户端应用程序和使用参数(如(Delphi示例)

)执行此操作
EXEC sp_dbcmptlevel :CurrentDatabase, 100;
GO

并在运行时替换它,但我想只使用T-SQL代码。

2 个答案:

答案 0 :(得分:2)

您可以使用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 :(得分:1)

你可以尝试

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

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

您还应该查看此http://msdn.microsoft.com/en-us/library/ms178653.aspx