yue WeiID:weiyue_net
1917次访问,排名2万外好友11人,关注者11
居安思危 滴水穿石
weiyue_net的文章
原创 8 篇
翻译 0 篇
转载 3 篇
评论 1 篇
weiyue_net的公告
image
最近评论
weiloveyue:Nice wrok! Thanks
文章分类
收藏
相册
Bolg Spider
DotNet Kicks(RSS)
存档
订阅我的博客
XML聚合  FeedSky

原创 [SQL模板] 避免使用游标 cursor 的最佳方法收藏

新一篇: [JavaScript] Javascript 读取 XML String 或 XML File | 旧一篇: [必备工具] SQL2005 Management Studio 之 SSMS Tools Pack


很多数据管理员DBA会告诉你尽量避免使用cursor. 它会锁住读取的数据甚至表单。经过搜索和研究,觉得用以下方法作为替代最好。代码是我用模板(Template)的形式写的。将代码粘贴到SQL Server Management Studio (SSMS), 按住Ctl + Shilft + M, 然后点击OK, 就可以运行了。

-- =============================================
--
 Use while loop to avoid cursor
--
 =============================================

DECLARE @NumberRecords int@RowCount int
DECLARE @ProductID int@ProductName nvarchar(200)

DECLARE <@table_variable, sysname, @tbl_loop> as TABLE (
    RowID 
int identity(1,1),
    ProductID 
int,
    ProductName 
nvarchar(200)
)

INSERT <@table_variable, sysname, @tbl_loop> (ProductID, ProductName)
<select_statement, , SELECT TOP 10 ProductID, ProductName FROM Northwind.dbo.Products>

-- Get the number of records in the table variable
SET @NumberRecords = @@ROWCOUNT
SET @RowCount = 1


WHILE @RowCount <= @NumberRecords
BEGIN

    
SELECT @ProductID = ProductID, @ProductName = ProductName
    
FROM <@table_variable, sysname, @tbl_loop>
    
WHERE RowID = @RowCount

    
-- Insert your code here
    PRINT ' Product Name: ' + @ProductName

    
SET @RowCount = @RowCount + 1
END

SQL2005 Template - 模板的制作和使用方法

1. 打开模板浏览器 Ctl + Alt + T
2. 你可以看到很多自代的模板,例如用SQL发Email
mail
3. SQL2000 中的旧模板,被放在"Earlier Versions" 文件夹下. 例如游标cursor的模板就在这里
  old

4. 你可以创建自己的文件夹和模板

         create

5. 也可以将模板文件直接放到以下路径, 然后关闭再打开SSMS,就可以看到新加的模板了

Window XP:
C:\Documents and Settings\<user>\Application Data\Microsoft\Microsoft SQL Server\90\Tools\Shell\Templates\Sql\<some folder>. 
Windows Vista:
C:\Users\<user>\AppData\Roaming\Microsoft\Microsoft SQL Server\90\Tools\Shell\Templates\Sql\<some folder>

相关链接
1. 如何使用Table Variable, Local/Global Temporary Table, and Permanent Table  (极力推荐!)
http://databases.aspfaq.com/database/should-i-use-a-temp-table-or-a-table-variable.html
http://searchsqlserver.techtarget.com/tip/0,289483,sid87_gci1267047,00.html

发表于 @ 2008年05月09日 21:36:00|评论(loading...)|编辑

新一篇: [JavaScript] Javascript 读取 XML String 或 XML File | 旧一篇: [必备工具] SQL2005 Management Studio 之 SSMS Tools Pack

评论:没有评论。

发表评论  


登录
Csdn Blog version 3.1a
Copyright © weiyue_net