存储过程如下:USE [test]
GO
/****** Object:  StoredProcedure [dbo].[UpdateNowXcData]    Script Date: 04/01/2012 14:26:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GOALTER PROCEDURE [dbo].[UpdateNowXcData]
@ids int,
@times datetime,
@value int,
@monthTableName varchar(40),
@dayTableName varchar(40)
AS 
declare @sql varchar(MAX);
BEGIN
--UPDATE NowXcData SET TimeST = @times,NowData =@value WHERE CollectNodeId=@ids;set @sql ='INSERT INTO ' + @monthTableName + --+ '(TimeST,CollectNodeId,CollectID,SecondTableAdr,ChildSecondTable,FirstWarn,SecondWarn,NowData)
 ' VALUES('''+ CONVERT(nvarchar,@times,121) +''','+CONVERT(varchar,@ids) +',1,2,3,4,5,'+CONVERT(varchar,@value)+');';
--set @sql +='INSERT INTO ' + @dayTableName + '(TimeST,CollectNodeId,CollectID,SecondTableAdr,ChildSecondTable,FirstWarn,SecondWarn,NowData)
 --VALUES('''+ @times+''','+ @ids +',1,2,3,4,5,'+@value+');';
--print(@sql);
exec(@sql)
END我是这样调用            tUpdateCommand.Parameters.Clear();
            tUpdateCommand.Parameters.Add("@ids", SqlDbType.Int);
            tUpdateCommand.Parameters.Add("@times", SqlDbType.DateTime);
            tUpdateCommand.Parameters.Add("@value", SqlDbType.Int);
            tUpdateCommand.Parameters.Add("@monthTableName", SqlDbType.VarChar);
            tUpdateCommand.Parameters.Add("@dayTableName", SqlDbType.VarChar);            tUpdateCommand.CommandText = "UpdateNowXcData";
            tUpdateCommand.CommandType = CommandType.StoredProcedure;
            tUpdateCommand.Parameters[0].Value = id;
            tUpdateCommand.Parameters[1].Value = dateTime;
            tUpdateCommand.Parameters[2].Value =  value;
            tUpdateCommand.Parameters[3].Value = monthName;
            tUpdateCommand.Parameters[4].Value = dayName;
            tUpdateCommand.ExecuteNonQuery();
我有300条记录,用这个方式循环调用存储过程,完成一次完整的操作时间老是不稳定,有时候300毫秒, 有时候1秒多,然后我用数据库有话顾问分析了一下,它说有50%的操作时耗在语法错误,但我分析不知道哪里有问题,是因为循环调用300次存储过程的原因吗

解决方案 »

  1.   

    你存储过程传入的表变量@monthTableName 它的字段的数据类型与你动态插入的值的数据类型可能不符合
    建议你对比一下你插入的值的数据类型与表字段的数据类型是否一致。
      

  2.   

    exec UpdateNowXcData '45','2012-4-1 14:09:26','358','XcData001200800D201204','XcDataDay001200800'print结果:
    INSERT INTO XcData001200800D201204VALUES('2012-04-01 14:09:26.000',45,1,2,3,4,5,358);
      

  3.   


    这个才是exec UpdateNowXcData '45','2012-4-1 14:09:26','358','XcData001200800D201204','XcDataDay001200800'INSERT INTO XcData001200800D201204VALUES('2012-04-01 14:09:26.000',45,1,2,3,4,5,358);