sql server 存储过程语法create PROCEDURE [dbo].[Adm_ColumQuery]
@Alevelsvarchar(6), -----企业成员代码(3位数)
@StrWhere nvarchar(100)
as
begin
declare @sqlStr nvarchar(1000)-----主查询语句
set @sqlStr='select AaID,AsortID,AnavbarName,Alevels,
case Parent when 0 then '' '' end as Parent,
Unum ,
Alinkpath ,
case EnableStatus when 0 then ''在用'' 
when 1 then ''作废'' end as EnableStatus
from tAdminAuthority where Alevels = '+@Alevels + @StrWhere+'order by AsortID';
exec (@sqlStr)end我自己更改的mysql存储过程 代码,没有测试,不知道是否可用。DELIMITER $$
USE `test`$$
DROP PROCEDURE IF EXISTS `Adm_LogQuery`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `Adm_LogQuery`(
strWhere VARCHAR(500)
)
BEGIN
DECLARE sqlStr VARCHAR(1000);
SET @sqlStr='select * from tLog where 1=1 '+@strWhere+' ORDER BY opTime desc';
END$$
DELIMITER ;另外sql server有的存储过程需要返回参数,我用的是mysql自定义函数,现在请教,mysql中如何获取申明的值啊?以下是 sql server的存储过程,mysql如何调用声明的值呢?create PROCEDURE [dbo].[Adm_ProductNormAdd]
@NormName    nvarchar(20),-----名称
@NormID    varchar(20),----ID  
@NOrmLeves         int,------比例级别...省略代码declare @rID varchar(10)-----产品规格自增编号
if(exists(select RulsName from tDataRuls where RulsName=@NormName ))
begin
   return -1;----产品规格名称存在
end
if(exists (select RulsID from tDataRuls where RulsID=@NormID ))
begin
return -2;-----识别码存在
endinsert into tDataRuls
(RulsName, RulsID, transUnits, transUnitRelate, OutsidedataStart, GreatNumber, QueryIntegral, QueryNum,
          QueryRepeatInPass, QueryWay, QueryProcess, OkQueryID, isEnable, RulsNote) 
    values
(@NormName,@Normid,@NormLeves,@NormUnit,@outdatastart,'0',@QueryIntegral,@QueryNum,
         @QueryRepeatInPass,@QueryWay,@QueryProcess,@OkQueryID ,@isEnable,@RulsNote  )

解决方案 »

  1.   

    已搞定!参考语句CREATE DEFINER=`root`@`localhost` PROCEDURE `Adm_LogQuery`(
      strWhere  VARCHAR(500)
    )
    BEGIN
    DECLARE  sqlStr  VARCHAR(1000);
    SET  sqlStr=CONCAT('select * from  tLog where 1=1 ',strWhere,' ORDER BY opTime DESC');
    SET @sqlStr=sqlStr;
    PREPARE stmt FROM @sqlStr;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    END$$
      

  2.   

    MYSQL 的 CONCAT 看起来比MSSQL的 + 用起来要舒服了,呵呵。当字段类型为 int 等数字类型时, MSSQL 想拼接而不是求和, 得进行类似转化
    SELECT convert(nvarchar(1), 1) + convert(nvarchar(1), 1)  直接写成 SELECT 1 + 1 就成了求和了。而MYSQL 字段类型为数字时,想拼接而不是求和, 直接 SELECT CONCAT(1,1)  就OK了。
      

  3.   


    但是convert 要求格式严格呀,我开始就在拼接的时候,前后少了个空格 死活执行不了。