最近使用存储过程的一定小东西总结下
来源:互联网 发布:域名与二级域名 编辑:程序博客网 时间:2024/05/16 15:30
1,传递null值给存储过程参数
需要给存储过程中的参数设一个默认值null
@name nvarchar(50) = null,
@sex nvarchar(100) = null
select * from TableName where name like '%' + ISNULL(@name, name) + '%'
2,避免使用dynamic query
DECLARE @SQL nvarchar(4000)
SET @SQL = ' select * from TableName where state = 1 '
if (@sex = 'm')
BEGIN
SET @SQL = @SQL + ' AND num > 1 '
END
ELSE IF(@sex = 'w')
BEGIN
SET @SQL = @SQL + ' AND num > 5 '
END
EXECUTE (@SQL)
这种方式有一定弊端
可以替换成
select * from TableName where state = 1 AND ((@sex = 'm' AND num > 1 ) OR (@sex = 'w' AND num > 5))
3,使用CTE(Common Table Expressions)
例如简单的分页
DECLARE @FirstRecord int, @LastRecord int
SET @FirstRecord = (@currentPage - 1) * @pageSize
SET @LastRecord = @currentPage * @pageSize + 1; --这个分号不能少
WITH TempShopResult
AS
(
SELECT ROW_NUMBER() OVER(ORDER BY expId DESC) AS rowNum, * FROM View_TableList_New
WHERE state = 'succ'
)
SELECT * FROM TempShopResult WHERE rowNum > @FirstRecord AND rowNum < @LastRecord
4, 使用Try Catch,使用事务
BEGIN TRY
SELECT GETDATE()
SELECT 1/0--除零
END TRY
BEGIN CATCH
SELECT 'There was an error! ' + ERROR_MESSAGE()
RETURN
END CATCH;
--事务
BEGIN TRY --开始Try块..
BEGIN TRANSACTION -- 开始事务..
UPDATE MyChecking SET Amount = Amount - @Amount
WHERE AccountNum = @AccountNum
COMMIT TRAN -- 成功,提交事务!
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRAN --如果出错,回滚
-- you can Raise ERROR with RAISEERROR() Statement including the details of the exception
RAISERROR(ERROR_MESSAGE(), ERROR_SEVERITY(), 1) -- 用RAISEERROR()提出错误,或得到sysmessages表中的错误
END CATCH
这里最好这么写
IF(@@TRANCOUNT = 1) ROLLBACK TRAN
ELSE IF(@@TRANCOUNT > 1) COMMIT TRAN
RETURN @error
- 最近使用存储过程的一定小东西总结下
- 最近做单片机小东西的总结 (STC12C5A60S2)
- 最近积累的一些小东西
- 存储过程的使用总结
- 存储过程的入门使用的总结
- ASP使用存储过程的总结
- 最近写的一个存储过程
- mysql 写一个带有一定逻辑的存储过程
- 最近oracle使用过程中的一些总结
- mysql 事务总结 存储过程 + 最近sql查询后的练习反思
- 最近写的一个使用了表变量参数的存储过程
- Mysql存储过程使用总结
- 最近项目使用的SqLServer分页存储过程及调用封装代码
- 最近使用redis的总结
- 关于使用存储过程的好处的几点总结
- 存储过程的使用
- 存储过程的使用
- 存储过程的使用
- colorschememapping
- 操作系统开发系列——Bootloaders
- jstl 常用方法
- SQL自动编号 通过select生成自增长列的办法 应用在各种SQL排名中
- 【甜屋- The Sweety House】存在的bug与缺陷
- 最近使用存储过程的一定小东西总结下
- Ajax------------- spring+dwr整合
- 集成单元测试google test (转载)
- Spring定时器
- UDP 穿透NAT解析 TCP 穿透NAT解析
- 常用电容器
- oracle union union all intersect minus
- 适合做手机铃声的81首歌
- MyEclipse在线安装SVN步骤