执行动态sql后删除点后面的字符

时间:2015-01-12 16:23:43

标签: sql-server

我有一个如下所示的SQL语句: -

DECLARE @DbName NVARCHAR(200)='model54.18',@SQL NVARCHAR(MAX)

SET @SQL='
USE '+@DbName+'
EXEC (@SQL)

当我尝试执行此声明时,它正在删除' .18'从我的DbName和抛出数据库模型54不存在的错误。

知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

您需要使用Quotename来转义数据库名称中的dot

DECLARE @DbName NVARCHAR(200)='model54.18',@SQL NVARCHAR(MAX)

SET @SQL='USE '+quotename(@DbName)
print @sql
EXEC (@SQL)

答案 1 :(得分:3)

试试这样:

DECLARE @DbName NVARCHAR(200)='model54.18',@SQL NVARCHAR(MAX)

SET @SQL='
USE ['+@DbName+']'
EXEC (@SQL)

或者像这样:

DECLARE @DbName NVARCHAR(200)='model54.18',@SQL NVARCHAR(MAX)

SET @SQL='
USE '+QUOTENAME(@DbName)
EXEC (@SQL)