2
ALTER PROCEDURE [dbo].[InsertSMS]
-- Add the parameters for the stored procedure here
@SmsMsgDesc Nvarchar(Max)

AS
BEGIN

SET NOCOUNT ON;

INSERT INTO [Tbl_Log]([LogDescription])VALUES (@SmsMsgDesc)
declare @LogID int;
SET @LogID = CAST(SCOPE_IDENTITY() AS INT)

INSERT INTO [Tbl_SMS]
       ([SmsMsgDesc])
 VALUES
       **(@SmsMsgDesc+CAST(@LogID AS NVarchar(12)))**

END

ここでの問題は、連結が最後の文字列を連結しないことがあります。理由はわかりません

こうやっても

INSERT INTO [Tbl_SMS]
       ([SmsMsgDesc])
 VALUES
       **(@SmsMsgDesc+'Test')**

定数「Test」が文字列の最後に表示されないことがあります。これは私を夢中にさせます。助けてください!

次の C# 関数を使用してこのプロシージャを呼び出しています:-

public int InsertSMSDB(string Message)
    {
        try
        {
            //int LogID;
            SqlConnection Conn=new SqlConnection(SmsDBConnection);
            SqlCommand Comm = new SqlCommand("InsertSMS", Conn);
            Comm.CommandType = System.Data.CommandType.StoredProcedure;

            Comm.Parameters.AddWithValue("@SmsMsgDesc", Message);

            Conn.Open();
            int RowEffected=Comm.ExecuteNonQuery();
            Conn.Close();

            if (RowEffected > 0)
            {
                return RowEffected;
            }
            else
            {
                return -1;
            }


        }
        catch (SqlException ex)
        {
            return -1;
        }
    }

最後に、いくつかの情報は、アプリケーションでこのケースを調査するのに役立つ場合があります。2 つのスレッドが Tbl_SMS にアクセスします。挿入用の 1 つのスレッドと選択用の 1 つのスレッドがあります。

4

1 に答える 1

2

プロシージャ @SmsMsgDesc に渡された値が null の場合、連結されません。

null値を避けるためにこれを試してください

VALUES
       (isnull(@SmsMsgDesc,'')+CAST(@LogID AS NVarchar(12)))

あるいは

プロシージャヘッダーを変更できます

ALTER PROCEDURE [dbo].[InsertSMS]
@SmsMsgDesc Nvarchar(Max)=''
于 2012-10-09T10:42:03.433 に答える