私は3-4種類の処理を行っているTSQLクエリを持っています。varchar値 'LAST1、FIRST1'をデータ型intに変換するときに変換に失敗しました
エラー: "varchar値 'LAST1、FIRST1'をデータ型intに変換するときに変換に失敗しました。
エラーで参照される値は、ビューの姓と名を連結したものです。
他の投稿を読むことから、カンマが問題だと推測しましたが、どうすれば回避できますか?私はそれを使用する前にビューからコンマを取り除くために部分文字列を使用するか、ビューを書き直すか、または使用できるCASTまたは解析関数がありますか?コラム、「daysUntil」(INT)は30を=場合を経由して別のデータベースに新しいレコードを挿入する、ビュー
- を選択し、ループ:
はここでクエリが何をすべきかの概要です出力パラメータ@PK_IDにストアドプロシージャ
- 戻りSCOPE_IDENTITYは、電子メールの本文に新しい@PK_IDを使用してメールを送信
- 電子メールの本文に使用する
BTW私はすでに上記のすべてを処理できるC#コンソールアプリケーションを持っていますが、この機能をSQL Serverに移行したいと考えています。ここ
はSQLです:あなたは二回繰り返しint型の変数でINTO @iEmpID, @iEmpID, ...
を持って
DECLARE @MailTo varchar (1024)
DECLARE @MailBody varchar (1024)
DECLARE @MailSubject varchar (1024)
DECLARE @MailFlag int
DECLARE @Bcc varchar (256)
SET @Bcc = '[email protected];[email protected]
DECLARE @MailFrom varchar (256)
SET @MailFrom = '[email protected]'
DECLARE @Notification30Body varchar (512)
DECLARE @Notification30Subject varchar (512)
DECLARE @NotificationAllBody varchar (512)
SET @NotificationAllBody = 'REQUIREMENTS: requirements here'
--Declare variables to hold the data which we get after looping each record
DECLARE
@iEmpName VARCHAR(102),
@iEmpID INT,
@iEmail1 VARCHAR(24),
@iRvwDate smalldatetime,
@idaysUntil INT
DECLARE Empid_cur CURSOR FOR
select EmpName, EmpID, RvwDate, Email1, daysUntil from ABC.dbo.vwEmpDataTEST
--Flag the start of loop/curser
SET @MailFlag = 0
OPEN Empid_cur
FETCH NEXT FROM Empid_cur
INTO @iEmpID, @iEmpID, @RvwDate, @iEmail1, @idaysUntil
WHILE @@FETCH_STATUS = 0
BEGIN
IF (@idaysUntil = 30)
BEGIN
DECLARE @PK_ID INT;
EXEC XYZ.dbo.InsertEmpDataTEST @iEmpID, @PK_ID OUTPUT
SELECT @PK_ID
--send 30 day email here
SET @MailTo = @iEmail1
SET @MailBody = @Notification30Body
SET @MailSubject = @Notification30Subject
SET @Notification30Body = 'This Record is for ' + @iEmpName + ' is due in 30 days. Please open the fake URL to the new Record for ' + @iEmpName + ':' + CHAR(10) + ' http://server/Record/template.aspx?ID=' + @PK_ID
SET @Notification30Subject = 'Record for ' + @iEmpName
SET @MailFlag = 1 --email ready
END
IF (@MailFlag = 1)
BEGIN
--send email
EXEC msdb..sp_send_dbmail
@profile_name ='MailUser',
@recipients = @MailTo,
@blind_copy_recipients = @Bcc,
@subject = @MailSubject,
@body = @MailBody
END
FETCH NEXT FROM Empid_cur
INTO @iEmpID, @iEmpID, @RvwDate, @iEmail1, @idaysUntil
END
CLOSE Empid_cur
DEALLOCATE Empid_cur
コードのどの行でエラーが発生していますか?コードにはどんなエラーがありますか? –
コンマは問題ではありません。コンマがなくても、コードのどこかでintが不正に処理されている文字列があります。 –
@Chean:エラーの値に基づいて、最初のレコードの最初の列ですエラーが発生している場所。 SQLエラーコードは、245、レベル16、状態1、行56です。 – Doreen