设为首页 加入收藏

TOP

SqlServer与MySQL基本操作语句对比(二)
2015-11-21 01:40:27 来源: 作者: 【 】 浏览:3
Tags:SqlServer MySQL 基本操作 语句 对比
*FROM sys.indexesWHERE object_id= OBJECT_ID('tabName')

SELECT * FROM sys.sysindexesWHERE id = OBJECT_ID('tabName')

#######################################################################################

查看存储过程/函数定义:

--MySQL

SHOW CREATE{ PROCEDURE | FUNCTION }name ;

SHOW {PROCEDURE | FUNCTION } STATUS[ LIKE 'pattern'];

SELECT * FROM information_schema.RoutinesWHERE ROUTINE_NAME='name';

--SqlServer

exec sp_helpf_getdate

exec sp_helptextf_getdate

SELECT * FROM information_schema.RoutinesWHERE ROUTINE_NAME='name';

存储过程:

--MySQL

DELIMITER //

CREATE PROCEDUREsp_name(IN param1 INT,OUTparam2 INT)

BEGIN

{sql_statement}

END//

DELIMITER ;

CALL sp_name();

DROP PROCEDUREIF EXISTS sp_name;

--SqlServer

CREATE PROCEDUREsp_name(@param1INT,@param2INT OUTPUT)

AS

BEGIN

{sql_statement}

END

GO

EXEC sp_name();

DROP PROCEDUREsp_name;

函数:

--MySQL

DELIMITER //

CREATE FUNCTIONfn_name()

RETURNS Decimal(10,2)

RETURN 3.14;

//

DELIMITER ;

SELECT fn_name();

DROP PROCEDUREIF EXISTS fn_name;

--SqlServer

CREATE FUNCTIONdbo.fn_name()

RETURNS Decimal(10,2)

AS

BEGIN

RETURN 3.14

END

GO

SELECT dbo.fn_name();

DROP FUNCTIONdbo.fn_name;

触发器:

--MySQL

DELIMITER //

CREATE TRIGGERtr_name

{ AFTER| BEFORE } { INSERT| UPDATE | DELETE }

ON tabName

FOR EACHROW

BEGIN

{sql_statement;}

END

DELIMITER ;

DROP TRIGGER IF EXISTS tr_name;

--SqlServer

CREATE TRIGGERdbo.tr_name

ON [dbo].[tabName]

{ FOR| AFTER | INSTEAD OF} { INSERT | UPDATE| DELETE }

AS

BEGIN

{sql_statement;}

END

GO

DROP TRIGGER dbo.tr_name

#######################################################################################

循环语句:

--MySQL(1至100之和)

WHILE 循环:

DELIMITER //

CREATE PROCEDURETESTPRO()

BEGIN

DECLARE I,K INTDEFAULT 0 ;

WHILE I<= 100 DO

SET K= I + K;

SET I= I + 1;

END WHILE;

SELECT K;

END;//

DELIMITER ;

REPEAT UNTIL 循环:

DELIMITER //

CREATE PROCEDURETESTPRO()

BEGIN

DECLARE I,K INTDEFAULT 0 ;

REPEAT

SET K= I + K;

SET I= I + 1;

UNTIL I>100

END REPEAT;

SELECT K;

END;//

DELIMITER ;

LOOP 循环:

DELIMITER //

CREATE PROCEDURETESTPRO()

BEGIN

DECLARE I,K INTDEFAULT 0 ;

LABEL: LOOP

SET K= I + K;

SET I= I + 1;

IF I>100THEN

LEAVE LABEL;

END IF;

END LOOP;

SELECT K;

END;//

DELIMITER ;

CALL TESTPRO();

DROP PROCEDUREIF EXISTS TESTPRO;

--SqlServer

DECLARE @I INT = 1

DECLARE @K INT = 0

WHILE @I<= 100

BEGIN

SET @K = @K + @I

SET @I = @I + 1

END

SELECT @K

游标:

--MySQL(参数名称不能与列明一样)

DELIMITER //

CREATE PROCEDURETESTPRO()

BEGIN

DECLARE FName varchar(50);

DECLARE LName varchar(50);

DECLARE IsDone BOOLEAN DEFAULTFALSE;

DECLARE cursor_name CURSOR FOR SELECT FirstName,LastNameFROM Person;

DECLARE CONTINUE HANDLER FOR NOT FOUNDSET IsDone = TRUE;

OPEN cursor_name;

LABEL: LOOP

FETCH cursor_name INTO FName,LName;

IF IsDoneTHEN

LEAVE LABEL;

END IF;

SELECT CONCAT('Contact Name:',FName,LName)AS Name;

END LOOP;

CLOSE cursor_name;

END;//

DELIMITER ;

--SqlServer

DECLARE @LastName varchar(50),@FirstName varchar(50);

DECLARE contact_cursor CURSOR FOR SELECT LastName,FirstName FROM Person

OPEN contact_cursor;

FETCH NEXTFROM contact_cursorINTO @LastName,@FirstName;

WHILE @@FETCH_STATUS = 0

BEGIN

SELECT 'Contact Name: ' + @FirstName + ' '+ @LastName

FETCH NEXT FROM contact_cursorINTO @LastName,@FirstName;

END

CLOSE contact_cursor;

DEALLOCATE contact_cursor;

GO

####################################################

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇常用SQL语句收藏<一) 下一篇十种NoSQL数据库以及对比

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: