需要关于动态sql转义字符的帮助吗

需要关于动态sql转义字符的帮助吗,sql,sql-server-2008-r2,Sql,Sql Server 2008 R2,查询应返回一个结果,其中table='alrt' 但它在转义引用时有一个错误 declare @dbname nvarchar(max) declare @query nvarchar(max) set @dbname = 'alrt' set @query ='SELECT OBJECT_NAME(object_id) AS DatabaseName, last_user_update,convert(nvarchar(max),last_user_seek),last_user_

查询应返回一个结果,其中table='alrt'
但它在转义引用时有一个错误

declare @dbname nvarchar(max)  
declare @query nvarchar(max)  
set @dbname = 'alrt'  
set @query ='SELECT OBJECT_NAME(object_id) AS DatabaseName, last_user_update,convert(nvarchar(max),last_user_seek),last_user_scan,last_user_lookup,last_system_update FROM sys.dm_db_index_usage_stats WHERE database_id = DB_ID ('+'''Frontoffrob'''+') AND OBJECT_ID=OBJECT_ID('+@dbname+')'
exec (@query)
误差结果

Msg 207, Level 16, State 1, Line 1 Invalid column name 'alrt'.
.
.
.
以下查询正在运行
选择OBJECT_NAME(OBJECT_id)作为数据库名,将sys.dm_db_index_usage_stats(其中database_id=db_id('Frontoffrob')和OBJECT_id=OBJECT_id('ALRT')转换为sys.dm_db_index_usage_scan)

输出:

+--数据库名--+----上次用户扫描--+
|__2013年8月30日下午1:47


WHERE
子句中,使用以下内容:

'SELECT ... AND OBJECT_ID=OBJECT_ID('''+@dbname+''')'
实际上,您的查询应该如下所示:

set @query =
'SELECT 
    OBJECT_NAME(object_id) AS DatabaseName, 
    last_user_update,
    convert(nvarchar(max),last_user_seek),
    last_user_scan,
    last_user_lookup,
    last_system_update 
FROM sys.dm_db_index_usage_stats 
WHERE database_id = DB_ID (''Frontoffrob'') 
AND 
OBJECT_ID=OBJECT_ID(''' + @dbname+''')'

我建议你改为。这将避免逃逸问题。