我现在要建一个SP,内容是插入记录,表名是动态的,想从参与传入,参数表如下@表名 nvarchar(40),
@标识 uniqueidentifier, 
@线程编号 varchar(10), 
@设备编号 varchar(10), 
@日志时间秒 datetime, 
@日志时间毫秒 int, 
@日志类型 nvarchar(20),
@日志位置 nvarchar(100),
@日志标题 nvarchar(100),
@日志内容 ntext想请教这个SP怎么写,因为动态表名,又是GUID的,拼接不好用,提示不能ADD操作不支持GUID和日期期
另外想请教一下,这个SP写成后,如果我在程序里多线程需要非常频繁的插入,我的代码怎么写比较好,.NET程序。
能达到每秒200条插入的.NET程序怎么写比较好,谢谢。

解决方案 »

  1.   

    表名用guid?
    那你以后怎么引用表?
    如果不是GUID,拼语句动态执行就行了.
    如果表名不多,可以用 if else 选几个语句分别单独执行,而不用动态.
      

  2.   

    把GUID能不能转换一下 不然没办法拼接 写不了存储过程。
      

  3.   

    try:
    create procedure insertintotb
    (
    @表名 nvarchar(40),
    @标识 uniqueidentifier,  
    @线程编号 varchar(10),  
    @设备编号 varchar(10),  
    @日志时间秒 datetime,  
    @日志时间毫秒 int,  
    @日志类型 nvarchar(20),
    @日志位置 nvarchar(100),
    @日志标题 nvarchar(100),
    @日志内容 ntext
    )
    as
    begin
    declare @sql nvarchar(max)
    set @sql='insert into '+@表名+' select '''+@标识+''','''+@线程编号+''','''+@设备编号+''','''+@日志时间秒+''','
    +ltrim(@日志时间毫秒)+','''+@日志类型+''','''+@日志位置+''','''+@日志标题+''','''+@日志内容+''''
    exec(@sql)
    end 
      

  4.   


    这会大哥,我一会到公司试一下。不过还想请教个问题,如果是这样我在.NET调用时,直接用cmd类来执行SP,这个效率和我在程序里执行拼接的SQL有明显提高吗。因为我每秒需要达到200次插入以上,想了解一下情能方面的情况。
      

  5.   

    如果你的表并不是很多,建议把过程写成if else 的结构,而不要去用动态拼接.因为动态拼接与直接插入效率要差很多.另外,注意一个名词,你的题目标题是"求一个sp",其实,sp 是 system procedure 的意思,系统存储过程都是用sp_作前缀的.但你要的是用户自定义存储过程,不知道是不是你们老师有误导,让你形成了一个印象以为创建存储过程就是创建sp,这恐怕不太对.
      

  6.   


    这位高手,SP是指Stored procedure,呵呵
    另外请教,如果表名是动态的,那用这种在SP中拼接式的SQL和直接SQL语句两个,效率两种好呢,或是有其它高效的办法