Sql Msg 102,15级,状态1,第13行“?”附近语法不正确

Sql Msg 102,15级,状态1,第13行“?”附近语法不正确,sql,sql-server,tsql,sql-server-2012,sp-send-dbmail,Sql,Sql Server,Tsql,Sql Server 2012,Sp Send Dbmail,我正在努力处理一小段代码 该代码在普通SSM中运行良好,但在我将其放入邮件发送步骤时似乎失败了 它只是列出表和计数,手工操作已经太久了。 我正在尝试创建工作,以便在更新数据时,可以将计数邮寄给每台服务器的repsective person EXEC msdb.dbo.sp_send_dbmail @profile_name = 'dbmail', @recipients='random@needsthese.com', @subject = 'those counts you want', @

我正在努力处理一小段代码

该代码在普通SSM中运行良好,但在我将其放入邮件发送步骤时似乎失败了

它只是列出表和计数,手工操作已经太久了。 我正在尝试创建工作,以便在更新数据时,可以将计数邮寄给每台服务器的repsective person

EXEC msdb.dbo.sp_send_dbmail 
@profile_name = 'dbmail',
@recipients='random@needsthese.com',
@subject = 'those counts you want',
@body = 'these are count changes',
@execute_query_database = 'nbdb',
@query = 'CREATE TABLE #counts
(
    table_name varchar(255),
    row_count int
)

EXEC sp_MSForEachTable @command1='INSERT #counts (table_name, row_count) 
SELECT ''?'', COUNT(*) FROM ?'

SELECT table_name, row_count FROM #counts ORDER BY table_name, row_count DESC'

将其修改为以下内容只需在适当的位置添加引号

EXEC msdb.dbo.sp_send_dbmail 
@profile_name = 'dbmail',
@recipients='random@needsthese.com',
@subject = 'those counts you want',
@body = 'these are count changes',
@execute_query_database = 'nbdb',
@query = 'CREATE TABLE #counts
(
    table_name varchar(255),
    row_count int
)

EXEC sp_MSForEachTable @command1=''INSERT #counts (table_name, row_count) 
SELECT ''?'', COUNT(*) FROM ?''

SELECT table_name, row_count FROM #counts ORDER BY table_name, row_count DESC'

从代码突出显示中,我看到了一些报价问题,你也看到了吗?同意Patrick的观点。你确定这段代码在SSMS中运行良好吗?我有“对于@command1,否则我在关键字“INSERT”附近得到了不正确的语法”。ssms中的错误。在ssms中,它确实可以正常运行,即使使用?在“选择状态”选项卡上。如果secify查询变量在ssms中运行良好,而不是在整个sp_send_mail oneHi中运行,则在解析和运行时,query语句会给出相同的错误。办公室的一位高级职员告诉我,sp_send_mail不能使用局部变量,因此sp_MSforeachtable“?”变量不能使用。分离这些步骤可以使邮件具有结果。干杯