如何取的SYBASE中正在執行的SQL語句
經過觀察發現,總是有一個進程會長時間的占用日志空間,無法釋放,只能殺掉該進程,為了找到該進程是哪個客戶端程序,故整理如下方法來獲取該進程正在執行的SQL語句。
通過返回的SQL語句,定位了故障程序,解決了一個大bug
第一步,打開sybase central,在左邊視圖中,雙擊數據庫服務器名稱,然后雙擊“登錄”文件夾,在右邊的視圖中選擇“增加登錄”。新建一個“登錄”,輸入登錄名:ts,設置口令,然后單擊下一步,直到完成。
第二步,在新建好的登錄名上單擊鼠標右鍵,選擇“屬性”選項。
第三步,在屬性窗口中選擇“角色”頁,點擊“增加角色”按鈕。
第四步,在彈出窗口中選中sa_role和sybase_ts_role兩個角色(按住ctrl鍵來多選),點擊“確定”按鈕保存設置。
第六步,輸入語句select * from syslogshold,如果有記錄返回,則記住第三個字段(spid)的值。
第七步,輸入SQL語句:dbcc traceon(3604)dbcc sqltext(上一步中第三個字段的值)執行,輸出結果即為該進程正在執行的SQL語句。
sybase 下sql查詢語句問題
使用外聯接。
僅當至少有一個同屬于兩表的行符合聯接條件時,內聯接才返回行。內聯接消除與另一個表中的任何行不匹配的行。而外聯接會返回 FROM 子句中提到的至少一個表或視圖的所有行,只要這些行符合任何 WHERE 或 HAVING 搜索條件,數據庫管理系統將檢索通過左向外聯接引用的左表的所有行,以及通過右向外聯接引用的右表的所有行。完整外部聯接中兩個表的所有行都將返回。
根據您說的情況,SQL如下:
SELECT *, *, * FROM A LEFT JOIN B ON *=*;
如果您使用的是Sybase數據庫,那么這個SQL應該這樣寫:
SELECT *, *, * FROM table_a A, table_b B WHERE * *= *;
注意:用*=代替LEFT JOIN。
如果您使用11.9.2及以上的Sybase版本,還可以這樣寫:
SELECT *, *, * FROM A LEFT OUTER JOIN B ON * = *;
什么語句能查詢出sybase數據庫中有哪些
列出某個數據庫中所有表:
Select Name from sysobjects where Type='U'
列出數據庫中某個表中的所有字段:
Select Name from syscolumns where ID=OBJECT_ID(N'TableName')
列出所有的數據庫:
1)use master select * from *abases
2)exec sp_MSforeachdb N'use [?]select dbname=db_name(),username=user_name()'