2015-10-06 69 views
0

我正在尝试使用光标构建循环,以便将延期订单列表发送给具有此类延期订单的客户端。SQL Server:通过电子邮件发送动态SQL查询的结果

WHILE循环使用光标是确定的,而我正确读取当前@idClient@email,但我不知道如何有过滤对@idClient查询。

这里是(非工作)语句我迄今所取得:

exec msdb..sp_send_dbmail @profile_name='sql_mail_lu', 
        @recipients = @email, 
        @subject = 'Your backorders', 
        @body = 'Please find in attachment the list of your items in backorder.', 
        @execute_query_database = 'ERPSQL', 
        @query = ' 
           SELECT TOP 100 
           NoDoc, Refer Product, Comm Ordered, isnull(Livr, 0) Delivered, BackOrder, VRef 
           FROM erpSQL.dbo.vwBoClients 
           WHERE idclient = ' + @idClient' , 
        @attach_query_result_as_file = 1, 
        @query_attachment_filename ='backorders.txt' 

我的问题是:我应该如何制定@query =部分,使其工作?

+0

和你得到了什么错误? –

回答

0

你需要逃避这些单引号:

exec msdb..sp_send_dbmail @profile_name='sql_mail_lu', 
        @[email protected], 
        @subject='Your backorders', 
        @body= 'Please find in attachment the list of your items in backorder.', 
        @execute_query_database = 'ERPSQL', 
        @query = ' 
           SELECT TOP 100 
           NoDoc, Refer Product, Comm Ordered, isnull(Livr, 0) Delivered, BackOrder, VRef 
           FROM erpSQL.dbo.vwBoClients 
           WHERE idclient = ''' + @idClient + ''' , 
        @attach_query_result_as_file = 1, 
        @query_attachment_filename =''backorders.txt''' 
+1

如果@idClient是一个字符串,那么你必须使用['QUOTENAME(...,''')'](https://msdn.microsoft.com/en-us/library/ms176114.aspx)来避免SQL注入。 –

+0

这是一个不是客户端应用程序的过程。 –

+0

这不会改变。它是SQL注入的可利用的载体。 –

相关问题