顯示具有 SQL 標籤的文章。 顯示所有文章
顯示具有 SQL 標籤的文章。 顯示所有文章

星期六, 11月 15, 2014

Oracle 使用Top選取前幾筆資料

說到Oracle很讓人不方便的地方,
最常遇到的大概就是沒有T-SQL的Top能用...
所以,這邊也記一下....

星期五, 11月 14, 2014

Oracle使用自動流水號


平常寫慣了MSSQL的T-SQL語法,
偶爾換到Oracle時老是會打結-.-

T-SQL裡有個很好用的形態叫做identity,
只要將欄位設定成identity後
新增資料時就會自動幫你填入資料的流水號,
但是在Oracle裡並沒有這樣的形態可以指定,
所以來簡單紀錄一下到底怎麼做才能有auto increment的功能~

星期一, 1月 31, 2011

[MSSQL]從其他資料庫匯入資料表

要休假前,人總是會比較恍神,
所以,同事今天看起來是這樣XD
他今天某張TALBE的東西,結果要update資料的時候,
where條件忘了放就直接的執行了,
想當然爾,所有的資料就通通的update過一次了XDXD

幸好該張表格,星期五到現在只有他一個人動過,
為啥是星期五,因為敝人駐點的公司MSSQL自動備份的功能失靈了,
敝人不會修,距今最近一次的人工備份則是星期五的晚上XD

幸好還有那份備份,
所以拿來還原到另一個SQL SERVER上後直接使用MSSQL的匯入匯出的功能,
就搞定惹~

星期五, 12月 31, 2010

[SQL]隨機排序結果

文章參考:SQL to Select a random row from a database table

同事有個需求,想要資料庫出來的資料是隨機排序結果
剛好查到這篇文章,裡面除了我要的MSSQL的語法外,
也一併提供了多種SQL的隨機排序寫法,
包含常見的MySQL,Oracle,不常見的也有就是 :D
至於我要的就只有
SELECT * FROM TABLENAME ORDER BY NEWID()
排序用ORDER BY NEWID() 就可以隨機排序啦~

星期六, 11月 13, 2010

[MSSQL]列出資料庫所有資料表的狀態

找資料找到的,可以列出所有TABLE目前的資料量,使用多少容量,blabla之類的。
出來就像下面這張圖這樣@_@


declare @id int 
declare @type character(2) 
declare @pages int 
declare @dbname sysname
declare @dbsize dec(15,0)
declare @bytesperpage dec(15,0)
declare @pagesperMB dec(15,0)

create table #spt_space
(
objid int null,
rows int null,
reserved dec(15) null,
data dec(15) null,
indexp dec(15) null,
unused dec(15) null
)

set nocount on

-- Create a cursor to loop through the user tables
declare c_tables cursor for
select id
from sysobjects
where xtype = 'U'

open c_tables

fetch next from c_tables
into @id

while @@fetch_status = 0
begin

/* Code from sp_spaceused */
insert into #spt_space (objid, reserved)
select objid = @id, sum(reserved)
from sysindexes
where indid in (0, 1, 255)
and id = @id

select @pages = sum(dpages)
from sysindexes
where indid < 2
and id = @id
select @pages = @pages + isnull(sum(used), 0)
from sysindexes
where indid = 255
and id = @id
update #spt_space
set data = @pages
where objid = @id


/* index: sum(used) where indid in (0, 1, 255) - data */
update #spt_space
set indexp = (select sum(used)
from sysindexes
where indid in (0, 1, 255)
and id = @id)
- data
where objid = @id

/* unused: sum(reserved) - sum(used) where indid in (0, 1, 255) */
update #spt_space
set unused = reserved
- (select sum(used)
from sysindexes
where indid in (0, 1, 255)
and id = @id)
where objid = @id

update #spt_space
set rows = i.rows
from sysindexes i
where i.indid < 2
and i.id = @id
and objid = @id

fetch next from c_tables
into @id
end

select TableName = (select left(name,60) from sysobjects where id = objid),
Rows = convert(char(11), rows),
ReservedKB = ltrim(str(reserved * d.low / 1024.,15,0) + ' ' + 'KB'),
DataKB = ltrim(str(data * d.low / 1024.,15,0) + ' ' + 'KB'),
IndexSizeKB = ltrim(str(indexp * d.low / 1024.,15,0) + ' ' + 'KB'),
UnusedKB = ltrim(str(unused * d.low / 1024.,15,0) + ' ' + 'KB')

from #spt_space, master.dbo.spt_values d
where d.number = 1
and d.type = 'E'
order by reserved desc 
drop table #spt_space
close c_tables
deallocate c_tables
資料來源:unicorn.net

星期二, 8月 31, 2010

[SQL]物件"blabla" 沒有 EXECUTE 權限。

月底快到了~
為了讓自己看起來有做事,
所以今天花了點時間處理一下公司的電子報一直運作不能的問題。
從上星期五開始就一直在看相關的程式碼,
終於在昨天連回公司在前人的交接文件堆中翻翻挖挖的找到了電子報的發報程式。

程式碼果然是是關鍵中的關鍵阿 Orz

其實一直知道某支排程的程式有些許問題而不能執行,
不過 沒有程式碼卻怎麼也使不上力做點事情
接下來就是耐心的DEBUG了(淚
根據歷史資料的推斷,在年初時該程式都能夠正常的運作,
不過就是過個年,接下來它竟然整個想退休了!!!

一打開來...C# 囧rz
不是不懂,不過看的很吃力...
上次跟熊姐閒聊順便聊到了我的C#恐懼症,
有空再來瞎扯這段XD

接下來就是TRACE CODE啦~~
前面看起來都蠻順的,就是跑到一半會發生問題,
當然就是下小紅點來一步一步追~
程式跑到這句時就自動的出錯了
Exec  Sql comment blabla~~
這句大概的意思就是說去執行存在資料庫中預存程序blabla之類的。
然後我獲得了"物件"blabla" 沒有 EXECUTE 權限。"金句一句!!
網路上GOOOGLE了一下,喔喔~還是有人跟我一樣遇到同樣的困境。
看完了他的解答後,我的問題也解的差不多了~
不過,雙方的解法有點不太一樣,大概是建立環境的不同,
我的作業環境是WIN2003 & MSSQL2005。
簡單來說,就是權限的問題啦~~
接下來就是輕鬆的解答了~
首先當然是去找到預存程序的位置~
vs2008跟2005藏的地方有點不太一樣~當初找的有點久 Orz
接下來當然是給予權限啦~ 
這樣做完後,程式整個就可以正常執行啦~~ㄎㄎ

後記:
結果這問題解完,得意忘形的發了公司內部的測試信件,
每個同事收了20~30封同樣的信,敝人也砍信砍到手軟...囧
看樣子還是逃離不了重寫的命運嗎.....Orz