0

受信者のリストに個別にメールを送信しようとしています。エラーが発生しました:

Msg 22050, Level 16, State 1, Line 0
Error formatting query, probably invalid parameters
Msg 14661, Level 16, State 1, Procedure sp_send_dbmail, Line 478
Query execution failed: Msg 4104, Level 16, State 1, Server xxxxxx, Line 1
The multi-part identifier "email@example.com" could not be bound.

これが私のコードの簡略化されたバージョンです。table1が有効な既存のテーブルであり、nameとemailが既存の列であると仮定しています。

declare @current_mailaddress varchar(50), @query varchar(1000)
set @current_mailaddress = 'email@example.com'

set @query = 'select distinct name, email from table1 
              where email = ' + @current_email

exec msdb.dbo.sp_send_dbmail 
 @recipients = @current_email,
 @subject = 'test',
 @query = @query

したがって、エラーによると、(おそらく@queryの)フォーマットが間違っています。私はそれを理解することはできません。何か案は?

4

1 に答える 1

2

@current_emailの値を引用符で囲む必要があります。

'SELECT ... WHERE email = ''' + @current_email + ''''

理由を確認するには、クエリがそれなしで現在どのように見えるかを検討してください。

SELECT ... WHERE email = email@example.com

動的SQLを使用するときはいつでも、奇妙なエラーが発生した場合にデバッグ用に変数をPRINTすることをお勧めします。通常、作成したSQL文字列が期待したものではない場合があります。別の無関係な答えでデバッグコードを管理する簡単な方法を提案しました。

于 2012-05-30T07:03:03.873 に答える