1、如何把字符         @name='jim' and @id=10 and @project='IT001'
   拆成配对的dictionary
   @name  'jim'
   @id     10 
   @project  'IT001'
2、字符串:with cte as
(SELECT distinct DBB006  FROM WOMDBA with(nolock) JOIN WOMDBB ON DBA001=DBB001 AND DBB002=DBA002 AND DBB003=DBA003 AND DBA004=DBB004
WHERE DBA002=@客户编号 AND DBA003 LIKE '54%' AND DBA005 BETWEEN @开始日期 AND @结束日期
and exists(select 1 from INVMHC with(nolock) WHERE MHC002=DBA002 AND MHC003=DBB006 AND MHC016='Y'))select DHB002,DHA005,DHA009,DHA010,DHB006,DHB007,DHB008,DHB009,DHB011,DHB018,DHB029 from PURDHA with(nolock) JOIN PURDHB with(nolock) ON DHA002=DHB002 
AND DHA003=DHB003 AND DHA004=DHB004
WHERE (DHA005 BETWEEN @开始日期 AND @结束日期
AND DHA002=@客户编号)
and DHB006 not in  (select DBB006 from cte)如何将以上的@开头的字符提取出来,结果 :@客户编号 @开始日期  @结束日期

解决方案 »

  1.   

    正则表达式:(?is)(?<=@)([^\s]*?)(?=(\s|\)))
      

  2.   


    如何把字符 @name='jim' and @id=10 and @project='IT001'
    提取出来:
      拆成配对的dictionary
      @name      'jim'
      @id        10  
      @project  'IT001'
      

  3.   

    (?is)(?<=@)(?<paramName>[^=]*?)=(?<paramValue>[^=]*?)(?=(\s|$))取macth.Groups["paramName"] 和 match.Groups["paramValue"]
      

  4.   


    如果是想要使用存储过程,我认为也不用拆,直接传递参数就行了。如:
      //添加参数
       myCommand.Parameters.Add("@name",SqlDbType.VarChar);
       myCommand.Parameters["@name"].Value ="jim";   //添加输出参数
       myCommand.Parameters.Add("@id",SqlDbType.Int);
       myCommand.Parameters["@id"].Value=10;
      

  5.   

    如果你是懒得写参数定义,也可以让ado.net自己去生成参数http://msdn.microsoft.com/zh-cn/library/yy6y35y8.aspx
      

  6.   

    让ado.net自动生成参数的方法http://www.cnblogs.com/dushouke/archive/2009/08/03/DeriveParameters-Get-Parameter-Information-for-Stored-Procedure.html