2017-01-09 8 views
0

私は3-4種類の処理を行っているTSQLクエリを持っています。varchar値 'LAST1、FIRST1'をデータ型intに変換するときに変換に失敗しました

エラー: "varchar値 'LAST1、FIRST1'をデータ型intに変換するときに変換に失敗しました。

エラーで参照される値は、ビューの姓と名を連結したものです。
他の投稿を読むことから、カンマが問題だと推測しましたが、どうすれば回避できますか?私はそれを使用する前にビューからコンマを取り除くために部分文字列を使用するか、ビューを書き直すか、または使用できるCASTまたは解析関数がありますか?コラム、「daysUntil」(INT)は30を=場合を経由して別のデータベースに新しいレコードを挿入する、ビュー

  • でレコードを

    1. を選択し、ループ:

      はここでクエリが何をすべきかの概要です出力パラメータ@PK_IDにストアドプロシージャ

    2. 戻りSCOPE_IDENTITYは、電子メールの本文に新しい@PK_IDを使用してメールを送信
    3. 電子メールの本文に使用する

    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 
    
  • +0

    コードのどの行でエラーが発生していますか?コードにはどんなエラーがありますか? –

    +0

    コンマは問題ではありません。コンマがなくても、コードのどこかでintが不正に処理されている文字列があります。 –

    +0

    @Chean:エラーの値に基づいて、最初のレコードの最初の列ですエラーが発生している場所。 SQLエラーコードは、245、レベル16、状態1、行56です。 – Doreen

    答えて

    0

    のでINTO @iEmpName, @iEmpID,...に列と変数(およびその種類)を変更するすべて揃っています。

    関連する問題