SQL错误 - 关键字“数据库”附近的语法不正确

时间:2017-07-06 13:29:20

标签: sql sql-server navision

我想在MS SQL DB中检测以'NAV'开头的数据库。我用这段代码试了一下:

DECLARE @DBName NVARCHAR(MAX);
SET @DBName = (SELECT name FROM master.dbo.sysdatabases where name LIKE '%NAV%');
EXECUTE ('USE' + @DBName);

但是我收到了错误消息:

Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'Database'.

知道那里有什么问题吗?

2 个答案:

答案 0 :(得分:3)

我不确定错误消息中的关键字数据库,但我确实发现了问题: 您连接USE和没有空格的数据库名称:USENAV01不起作用。您应该使用'USE ' + QUOTENAME(@DBName)

其次,我不知道其意图是什么,但如果您执行EXECUTE ('USE ' + @DBName);后跟其他(动态)查询,则会在当前连接上执行以下查询。换句话说,USE XXX对于以下查询无关紧要。

第三,正如Jesse在下面的评论所述;如果您有多个带name like '%NAV%'的数据库(您的问题建议),则只对其中一个数据库执行代码。没有order by,哪一个是不可预测的。如果要为所有相关数据库执行代码,则必须循环遍历它们。

答案 1 :(得分:2)

在USE之后放置一个空格并在数据库名称周围加上括号:

DECLARE @DBName NVARCHAR(MAX);
SET @DBName = (SELECT name FROM master.dbo.sysdatabases where name LIKE '%NAV%');
EXECUTE ('USE [' + @DBName + ']');