MySql与SqlServer的一些常用用法的差别
    本文将主要列出MySql与SqlServer不同的地方,且以常用的存储过程的相关内容为主。
1. 标识符限定符
SqlServer [] 
MySql `` 
2. 字符串相加
SqlServer 直接用 + 
MySql concat() 
3. isnull()
SqlServer isnull() 
MySql ifnull()
注意:MySql也有isnull()函数,但意义不一样 
4. getdate()
SqlServer getdate() 
MySql now() 
5. newid()
SqlServer newid() 
MySql uuid() 
6. @@ROWCOUNT
SqlServer @@ROWCOUNT 
MySql row_count()
注意:MySql的这个函数仅对于update, insert, delete有效  
7. SCOPE_IDENTITY()
SqlServer SCOPE_IDENTITY() 
MySql last_insert_id() 
8. if ... else ...
SqlServer IF Boolean_expression 
     { sql_statement | statement_block } 
[ ELSE 
     { sql_statement | statement_block } ]  
-- 若要定义语句块,请使用控制流关键字 BEGIN 和 END。 
MySql IF search_condition THEN statement_list
    [ELSEIF search_condition THEN statement_list] ...
    [ELSE statement_list]
END IF 
注意:对于MySql来说,then, end if是必须的。类似的还有其它的流程控制语句,这里就不一一列出。
9. declare
其实,SqlServer和MySql都有这个语句,用于定义变量,但差别在于:在MySql中,DECLARE仅被用在BEGIN ... END复合语句里,并且必须在复合语句的开头,在任何其它语句之前。这个要求在写游标时,会感觉很BT.
10. 游标的写法
SqlServer declare @tempShoppingCart table (ProductId int, Quantity int)
insert into @tempShoppingCart (ProductId, Quantity)
	select ProductId, Quantity from ShoppingCart where UserGuid = @UserGuid
declare @productId int
declare @quantity int
declare tempCartCursor cursor for 
		select ProductId, Quantity from @tempShoppingCart
open tempCartCursor
fetch next from tempCartCursor into @productId, @quantity
while  @@FETCH_STATUS = 0
begin
	update Product set SellCount = SellCount + @quantity	where productId = @productId
	fetch next from tempCartCursor into @productId, @quantity
end
close tempCartCursor
deallocate tempCartCursor 
MySql declare m_done int default 0;
declare m_sectionId int;
declare m_newsId int;
declare _cursor_SN cursor for select sectionid, newsid from _temp_SN;
declare continue handler for not found set m_done = 1;
create temporary table _temp_SN select sectionid, newsid from SectionNews  group by sectionid, newsid having count(*) > 1;
open _cursor_SN;
while( m_done = 0 ) do
	fetch _cursor_SN into m_sectionId, m_newsId;	
	if( m_done = 0 ) then 
		-- 具体的处理逻辑
	end if;
end while;
close _cursor_SN;
drop table _temp_SN; 
注意:为了提高性能,通常在表变量上打开游标,不要直接在数据表上打开游标。
11. 分页的处理
SqlServer create procedure GetProductByCategoryId( 
    @CategoryID int, 
    @PageIndex int = 0, 
    @PageSize int = 20, 
    @TotalRecords int output
) 
as
begin     
declare @ResultTable table
( 
    RowIndex int, 
    ProductID int, 
    ProductName nvarchar(50), 
    CategoryID int, 
    Unit nvarchar(10), 
    UnitPrice money, 
    Quantity int
);      
insert into @ResultTable 
select row_number() over (order by ProductID asc) as RowIndex, 
       p.ProductID, p.ProductName, p.CategoryID, p.Unit, p.UnitPrice, p.Quantity 
from   Products as p 
where CategoryID = @CategoryID;        
select  @TotalRecords = count(*) from  @ResultTable;      
select * 
from &n