Mark jiaguoxinzhi linyee
因爲sql用得少,,經常會忘記怎麼寫。。
找得多了,,不如自己整個簡單的標例,備忘。
declare @chlid bigint --定義變量用於保存遊標對應記錄的值
declare @pPath varchar --定義變量
declare cur2 cursor for select channelid,ChannelPath from dbo.Channel where ChannelDeep=2 --遊標指向記錄集
open cur2 --打開
fetch next from cur2 into @chlid,@pPath --獲取下一句,,
while @@FETCH_STATUS=0 --狀態未結束?
begin
--print @chlid
--print @pPath
update dbo.Channel set ChannelDeep=3,ChannelPath=@pPath+CAST(ChannelParent as varchar(20))+'/' where ChannelParent=@chlid --執行更新
fetch next from cur2 into @chlid,@pPath --繼續獲取下一句
end
close cur2 --關閉
deallocate cur2 --釋放
路徑中含本身
--UPDATE [dbo].[Channel] SET [ChannelDeep] = 0 ,[ChannelPath] ='/'+CAST(ChannelId as varchar(20))+'/' WHERE ChannelParent=0
declare @chlid bigint --定義變量用於保存遊標對應記錄的值
declare @pPath varchar --定義變量
declare cur1 cursor for select channelid,ChannelPath from dbo.Channel where ChannelDeep=2 --遊標指向記錄集
open cur1 --打開
fetch next from cur1 into @chlid,@pPath --獲取下一句,,
while @@FETCH_STATUS=0 --狀態未結束?
begin
--print @chlid
--print @pPath
update dbo.Channel set ChannelDeep=3,ChannelPath=@pPath+CAST(ChannelId as varchar(20))+'/' where ChannelParent=@chlid --執行更新
fetch next from cur1 into @chlid,@pPath --繼續獲取下一句
end
close cur1 --關閉
deallocate cur1 --釋放
GO
再完善點點
declare @chlid bigint --定義變量用於保存遊標對應記錄的值
declare @pPath varchar(255) --定義變量
SET nocount ON --忽略行數顯示
declare cur1 cursor --聲明遊標
for select channelid,ChannelPath from dbo.Channel where ChannelDeep=3 --遊標指向記錄集
open cur1 --打開
fetch next from cur1 into @chlid,@pPath --獲取下一句,,
while @@FETCH_STATUS=0 --狀態未結束?
begin
print @chlid
print @pPath
update dbo.Channel set ChannelDeep=4,ChannelPath=@pPath+CAST(ChannelId as varchar(20))+'/' where ChannelParent=@chlid --執行更新
fetch next from cur1 into @chlid,@pPath --繼續獲取下一句
end
close cur1 --關閉
deallocate cur1 --釋放
SET nocount OFF --打開計數