用sa賬戶登錄sql server 2008,勾選了“記住密碼”,但重新登錄時,SQL Server Management Studio無法記住密碼。
後來發現,在重新登錄時,登錄名顯示的並非是sa賬戶,而是其他賬戶。點擊下拉框,發現記錄的登錄名不止一個。於是嘗試清除這些歷史記錄。
清除SQL Server Management Studio的歷史記錄很簡單,只要刪除或重命名文件SqlStudio.bin即可。該文件通常在以下目錄:
xp在C:\Documents and Settings\Administrator\Application Data\Microsoft\Microsoft SQL Server\100\Tools\Shell\SqlStudio.bin
win7在C:\Users\%username%\AppData\Roaming\Microsoft\Microsoft SQL Server\100\Tools\Shell\SqlStudio.bin
清除之後,重新打開SQL Server Management Studio發現,之前那些記錄的登錄名果然沒了,然後重新用sa賬戶登錄,勾選“記住密碼”。如此反复幾次,發現就可以記住sa密碼了!
如果是 sql server 2005 出現同樣的問題,也可以嘗試以上解決方案。
sql server 2005記錄登錄名的文件是mru.dat,
路徑xp位於C:\Documents and Settings\Administrator\Application Data\Microsoft\Microsoft SQL Server\90\Tools\Shell\文件夾下。
搜尋此網誌
2013年7月9日 星期二
2013年6月19日 星期三
將多筆記錄做成一個欄位資料
Select count(*) AS [A]
From CNTMGM.DBO.CNTCMSD_TAB WHERE CNT_NO = 'M10200118000' AND Isnull(CheckDate, '') = ''
And BPKEY Not In ('4A409A56-97AB-42C6-A54D-32E077CC3ADC','15C7C764-32EF-40CF-B9C9-29D4595C1964')
UNION ALL
Select SUM(CONVERT(DECIMAL, REPLACE(INFOBCK.DBO.FN_ISEMPTY(ISNULL(OriMoney, '0'), '0'), ',', ''))) AS [A]
From CNTMGM.DBO.CNTCMSD_TAB WHERE BPKEY In ('4A409A56-97AB-42C6-A54D-32E077CC3ADC','15C7C764-32EF-40CF-B9C9-29D4595C1964')
SELECT ';' + CONVERT(NVARCHAR(MAX),A.A) FROM (
Select count(*) AS [A]
From CNTMGM.DBO.CNTCMSD_TAB WHERE CNT_NO = 'M10200118000' AND Isnull(CheckDate, '') = ''
And BPKEY Not In ('4A409A56-97AB-42C6-A54D-32E077CC3ADC','15C7C764-32EF-40CF-B9C9-29D4595C1964')
UNION ALL
Select SUM(CONVERT(DECIMAL, REPLACE(INFOBCK.DBO.FN_ISEMPTY(ISNULL(OriMoney, '0'), '0'), ',', ''))) AS [A]
From CNTMGM.DBO.CNTCMSD_TAB WHERE BPKEY In ('4A409A56-97AB-42C6-A54D-32E077CC3ADC','15C7C764-32EF-40CF-B9C9-29D4595C1964')
)A
FOR XML PATH('')
SELECT SeqNo,
(
SELECT DISTINCT S2.ProjectNo + ',' FROM CNTCMSD_TAB as s2
WHERE s1.SeqNo=s2.SeqNo
FOR XML PATH('')
) as ProductID
FROM CNTCMSD_TAB as s1
WHERE SeqNo LIKE 'NCNT-1020000142'
group by SeqNo
利用 CURSOR 跑迴圈
--宣告三個變數,@colA及@colB分別為table中的欄位,@MyCursor為指標
DECLARE @colA nvarchar(10)
DECLARE @colB nvarchar(10)
DECLARE @MyCursor CURSOR
--指定啟用了效能最佳化的 FORWARD_ONLY、READ_ONLY 資料指標
SET @MyCursor = CURSOR FAST_FORWARD
--假設TableA中有100筆,則下列的語法就會直接傳回100筆
FOR
Select colA,colB
From tableA
--開啟指標
OPEN @MyCursor
--取得第一筆的值放到@colA及@colB
FETCH NEXT FROM @MyCursor
INTO @ColA,@ColB
-- @@FETCH_STATUS=回針對連接目前開啟的任何資料指標而發出的最後一個資料指標 FETCH 陳述式的狀態
--傳回值
-- 0 FETCH 陳述式成功。
-- -1 FETCH 陳述式失敗,或資料列已超出結果集。
-- -2 遺漏提取的資料列。
--開始繞迴圈
WHILE @@FETCH_STATUS = 0
BEGIN
--顯示@colA及@colB的值在畫面上
PRINT @ColA
PRINT @ColB
--你也可以在這之中處理其他sql部份,例如你可以寫依據@colA及@colB這兩個key在tabl2查詢後的資料寫到table3
--這是其中一種應用
insert into table3
select *
from table2
where table2.c1=@colA and table2.c2=@colB
--取得下一筆記錄的colA及colB
FETCH NEXT FROM @MyCursor
INTO @ColA,@ColB
END
CLOSE @MyCursor
DEALLOCATE @MyCursor
DECLARE @colA nvarchar(10)
DECLARE @colB nvarchar(10)
DECLARE @MyCursor CURSOR
--指定啟用了效能最佳化的 FORWARD_ONLY、READ_ONLY 資料指標
SET @MyCursor = CURSOR FAST_FORWARD
--假設TableA中有100筆,則下列的語法就會直接傳回100筆
FOR
Select colA,colB
From tableA
--開啟指標
OPEN @MyCursor
--取得第一筆的值放到@colA及@colB
FETCH NEXT FROM @MyCursor
INTO @ColA,@ColB
-- @@FETCH_STATUS=回針對連接目前開啟的任何資料指標而發出的最後一個資料指標 FETCH 陳述式的狀態
--傳回值
-- 0 FETCH 陳述式成功。
-- -1 FETCH 陳述式失敗,或資料列已超出結果集。
-- -2 遺漏提取的資料列。
--開始繞迴圈
WHILE @@FETCH_STATUS = 0
BEGIN
--顯示@colA及@colB的值在畫面上
PRINT @ColA
PRINT @ColB
--你也可以在這之中處理其他sql部份,例如你可以寫依據@colA及@colB這兩個key在tabl2查詢後的資料寫到table3
--這是其中一種應用
insert into table3
select *
from table2
where table2.c1=@colA and table2.c2=@colB
--取得下一筆記錄的colA及colB
FETCH NEXT FROM @MyCursor
INTO @ColA,@ColB
END
CLOSE @MyCursor
DEALLOCATE @MyCursor
2013年6月4日 星期二
批次UPDATE跨資料庫
SQL Server 只收 [server].[database].[owner].[object name] 四個階層,超出的話就會錯誤,請改用別名 (alias) 方式來處理。
EXAMPLE:
Update PROJMGM.DBO.PISMINT_TAB set PROJMGM.DBO.PISMINT_TAB.G1TEMP = WKFSRV01.WEBFLOWDATA.DBO.TB_161_1.G1TEMP
FROM WKFSRV01.WEBFLOWDATA.DBO.TB_161_1
WHERE PROJMGM.DBO.PISMINT_TAB.EFORMSN = WKFSRV01.WEBFLOWDATA.DBO.TB_161_1.EFORMSN
Update PROJMGM.DBO.PISMINT_TAB set PROJMGM.DBO.PISMINT_TAB.G1TEMP = B.G1TEMP
FROM WKFSRV01.WEBFLOWDATA.DBO.TB_161_1 B
WHERE PROJMGM.DBO.PISMINT_TAB.EFORMSN = B.EFORMSN
EXAMPLE:
Update PROJMGM.DBO.PISMINT_TAB set PROJMGM.DBO.PISMINT_TAB.G1TEMP = WKFSRV01.WEBFLOWDATA.DBO.TB_161_1.G1TEMP
FROM WKFSRV01.WEBFLOWDATA.DBO.TB_161_1
WHERE PROJMGM.DBO.PISMINT_TAB.EFORMSN = WKFSRV01.WEBFLOWDATA.DBO.TB_161_1.EFORMSN
Update PROJMGM.DBO.PISMINT_TAB set PROJMGM.DBO.PISMINT_TAB.G1TEMP = B.G1TEMP
FROM WKFSRV01.WEBFLOWDATA.DBO.TB_161_1 B
WHERE PROJMGM.DBO.PISMINT_TAB.EFORMSN = B.EFORMSN
2013年4月20日 星期六
解決存取資料後出現資料亂碼的問題(Javascript 中文出現亂碼)
如果 Web application 的編碼規則是 utf-8,如網頁標頭中的:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
那麼 js 檔案中,如果有中文輸出就會出現亂碼,解決此個問題可在引用 javascript
輸出的地方加上 charset = "gb2312" 或 charset = "big5"(Big5繁體字)。
例:
<script type="text/javascript" language="javascript" src="output.js" charset="big5">
</script>
PS:另一種解決方法是把 js 存檔成 utf-8 編碼。
在DataAccess.asp及DataProcessWindow.asp都要加
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
那麼 js 檔案中,如果有中文輸出就會出現亂碼,解決此個問題可在引用 javascript
輸出的地方加上 charset = "gb2312" 或 charset = "big5"(Big5繁體字)。
例:
<script type="text/javascript" language="javascript" src="output.js" charset="big5">
</script>
PS:另一種解決方法是把 js 存檔成 utf-8 編碼。
在DataAccess.asp及DataProcessWindow.asp都要加
2013年4月7日 星期日
ASP錯誤處理
錯誤的類型有三種主要的錯誤類型:
編譯錯誤:
運行錯誤
邏輯錯誤
錯誤簡歷下一步的(這裡提醒一下初學者,在ASP中只有在錯誤恢復下一步語句沒有錯誤簡歷轉到語句)如果你不使用了on error resume
下面就是一個錯誤代碼:
Microsoft OLE DB提供ODBC驅動程序錯誤80004005[微軟] [ODBC驅動程序管理器]數據源名稱未發現和未指定默認驅動程序/ test.asp,第60行
當我們在程序最上面使用了on error resume處理錯誤
<%'設置緩衝區為真將Response.Buffer =真“開始錯誤處理在錯誤恢復下一步%><%'錯誤處理如果Err.Number中<> 0'清除頁面Response.Clear'顯示錯誤信息給用戶%><HTML><HEAD><TITLE> </ TITLE></ HEAD><BODY BGCOLOR="#C0C0C0">的防禦對部隊的錯誤發生在執行這個ASP頁面<BR>的請報告以下信息支持台<P><B>頁面錯誤對象</ B> <BR>錯誤:<%= Err.Number的%> - 錯誤信息:<%= Err.Description%,> <BR>出錯文件:<%= Err.Source%> <BR>出錯行:<%= Err.Line%> <BR></ FONT></ BODY></ HTML><%結束,如果%>你們上面看到了,我首先設置了on error resume下一步,這樣出現錯誤就不會影響程序的執行。錯誤處理和數據庫錯誤恢復下一步為避免這種情況,我們就先得做些手腳,正確處理的方法如下:,如果Err.Number中= 0和objConnection.Errors.Count = 0然後
“這裡才能執行語句的,因為沒有錯誤設置rstResults = dbData.Execute(txtSql)如果結束
更多高級的處理辦法
<%如果Err.Number中<> 0Response.Clear選擇案例Err.Number中案例8'指定錯誤的號碼'在這裡處理自定義錯誤其他案例“一般錯誤如果隨後則IsObject(objConnection)如果objConnection.Errors.Count> 0%><B>數據庫連接對象</ B><%對於intLoop = 0至objConnection.Errors.Count - 1%>
錯誤:<%= objConnection.Errors(intLoop)。數目%> <BR>說明:<%= objConnection.Errors(intLoop)。描述%> <BR>來源:<%= objConnection.Errors(intLoop)來源%> <BR>SQLSTATE:<%= objConnection.Errors(intLoop)。SQLSTATE%> <BR>NativeError中:<%= NativeError中objConnection.Errors(intLoop)。“
<%下如果結束如果結束如果Err.Number中<> 0%><B>頁面錯誤對象</ B> <BR>錯誤編號<%= Err.Number的%> - 錯誤描述<%= Err.Description%> - 源<%= Err.Source%> - LINENUMBER <%。= Err.Line%> <P><%如果結束最終選擇如果結束%>
案例語句,它能讓我們來處理特定的錯誤。重定向和錯誤處理
,如果Err.Number中= 0和objConnection.Errors.Count = 0然後
Response.Clear的Response.Redirect?<網址>?
如果結束
把代碼變得更整齊
在你程序的最上方加入(當然在語言聲明之後)在錯誤恢復下一步語句。在你執行SQL以前進行錯誤檢查。使用重定向以前也要進行錯誤處理。讓你處理錯誤的包含文件在代碼的最上面
編譯錯誤:
運行錯誤
邏輯錯誤
錯誤簡歷下一步的(這裡提醒一下初學者,在ASP中只有在錯誤恢復下一步語句沒有錯誤簡歷轉到語句)如果你不使用了on error resume
下面就是一個錯誤代碼:
Microsoft OLE DB提供ODBC驅動程序錯誤80004005[微軟] [ODBC驅動程序管理器]數據源名稱未發現和未指定默認驅動程序/ test.asp,第60行
當我們在程序最上面使用了on error resume處理錯誤
<%'設置緩衝區為真將Response.Buffer =真“開始錯誤處理在錯誤恢復下一步%><%'錯誤處理如果Err.Number中<> 0'清除頁面Response.Clear'顯示錯誤信息給用戶%><HTML><HEAD><TITLE> </ TITLE></ HEAD><BODY BGCOLOR="#C0C0C0">的防禦對部隊的錯誤發生在執行這個ASP頁面<BR>的請報告以下信息支持台<P><B>頁面錯誤對象</ B> <BR>錯誤:<%= Err.Number的%> - 錯誤信息:<%= Err.Description%,> <BR>出錯文件:<%= Err.Source%> <BR>出錯行:<%= Err.Line%> <BR></ FONT></ BODY></ HTML><%結束,如果%>你們上面看到了,我首先設置了on error resume下一步,這樣出現錯誤就不會影響程序的執行。錯誤處理和數據庫錯誤恢復下一步為避免這種情況,我們就先得做些手腳,正確處理的方法如下:,如果Err.Number中= 0和objConnection.Errors.Count = 0然後
“這裡才能執行語句的,因為沒有錯誤設置rstResults = dbData.Execute(txtSql)如果結束
更多高級的處理辦法
<%如果Err.Number中<> 0Response.Clear選擇案例Err.Number中案例8'指定錯誤的號碼'在這裡處理自定義錯誤其他案例“一般錯誤如果隨後則IsObject(objConnection)如果objConnection.Errors.Count> 0%><B>數據庫連接對象</ B><%對於intLoop = 0至objConnection.Errors.Count - 1%>
錯誤:<%= objConnection.Errors(intLoop)。數目%> <BR>說明:<%= objConnection.Errors(intLoop)。描述%> <BR>來源:<%= objConnection.Errors(intLoop)來源%> <BR>SQLSTATE:<%= objConnection.Errors(intLoop)。SQLSTATE%> <BR>NativeError中:<%= NativeError中objConnection.Errors(intLoop)。“
<%下如果結束如果結束如果Err.Number中<> 0%><B>頁面錯誤對象</ B> <BR>錯誤編號<%= Err.Number的%> - 錯誤描述<%= Err.Description%> - 源<%= Err.Source%> - LINENUMBER <%。= Err.Line%> <P><%如果結束最終選擇如果結束%>
案例語句,它能讓我們來處理特定的錯誤。重定向和錯誤處理
,如果Err.Number中= 0和objConnection.Errors.Count = 0然後
Response.Clear的Response.Redirect?<網址>?
如果結束
把代碼變得更整齊
在你程序的最上方加入(當然在語言聲明之後)在錯誤恢復下一步語句。在你執行SQL以前進行錯誤檢查。使用重定向以前也要進行錯誤處理。讓你處理錯誤的包含文件在代碼的最上面
2013年3月31日 星期日
TSQL顯示資料表, 欄位名稱, 型別, 長度 語法
這語法很好用,可以順利撈出資料庫中的所有資料表名稱,各資料表中的欄位名稱,型別,與長度。
另外補充:
要找出資料庫中的所有資料表==>查sys.objects
要找出某資料表中的所有欄位與欄位型別id, 長度==>查sys.columns
要找出欄位型別名稱==>查sys.types
--===============================================================
自從訂閱了點部落之後,對資訊系統的自我認知,已經遠超越「Mammut」與「Marmot」 的大小差異,並且日漸渺小當中,每日只能從眾多高手牙慧中,盼望能多吸取一些知識。這幾年來由於工作的不穩定,我得常接手別人開發的專案,每一個專案跟程 式設計師一樣,有著不同的個性,有的有高度的模組化,有的ASP互相亂 include 一堆,有的把4-5個專案放到同一個目的網站中,有的遺留了許多無用的程式碼......。程式碼這麼的多元化,當然資料庫就更千奇百怪了,相同的 是......都沒有DD、都沒有有用的文件。
另外補充:
要找出資料庫中的所有資料表==>查sys.objects
要找出某資料表中的所有欄位與欄位型別id, 長度==>查sys.columns
要找出欄位型別名稱==>查sys.types
--===============================================================
自從訂閱了點部落之後,對資訊系統的自我認知,已經遠超越「Mammut」與「Marmot」 的大小差異,並且日漸渺小當中,每日只能從眾多高手牙慧中,盼望能多吸取一些知識。這幾年來由於工作的不穩定,我得常接手別人開發的專案,每一個專案跟程 式設計師一樣,有著不同的個性,有的有高度的模組化,有的ASP互相亂 include 一堆,有的把4-5個專案放到同一個目的網站中,有的遺留了許多無用的程式碼......。程式碼這麼的多元化,當然資料庫就更千奇百怪了,相同的 是......都沒有DD、都沒有有用的文件。
所以我便常常需要一個一個去看資料表的欄位名稱,也得用 Query 的結果猜測,這個欄位的「意義」還有他可能會跟「哪些資料表」是有關連的。
今天看到「尋找某欄位存在那幾些資料表」文章,發現這個功能不就是我之前很想要的功能嗎?一次把相關連的欄位名稱都找出來,真棒~這個功能我需要。
可是我還想知道其他的一些資訊,所以動手改了一下 T-SQL,在看整個程式前,先來看三個資料庫物件
SELECT * FROM sysobjects where type='U' -- 查詢所有使用者資料表



當然你要查詢上述的資料庫物件,要先切換到你想查的資料庫囉(USE DataBase_Name;)!
底下以 「NorthWind」資料庫查詢為對象
請注意,當中的「store」的值是決定要不要把 Query 結果給儲存起來,當 store=1 則不儲存,其他值會寫到同一個DB裡,建立名為「__T_all___」的資料表,每次會刪除重新建立。

多了欄位屬性與欄位大小,我想在做比對的時候,會準確更容易找到真正對應的欄位名稱。
另一個例子:搜尋 emp 相關欄位
SET@cloumnname='emp'

~ End
今天看到「尋找某欄位存在那幾些資料表」文章,發現這個功能不就是我之前很想要的功能嗎?一次把相關連的欄位名稱都找出來,真棒~這個功能我需要。
可是我還想知道其他的一些資訊,所以動手改了一下 T-SQL,在看整個程式前,先來看三個資料庫物件
SELECT * FROM sysobjects where type='U' -- 查詢所有使用者資料表
SELECT * FROMsyscolumns whereid=117575457 -- 依某資料表ID查所有欄位
SELECT * FROM systypes -- 查欄位屬性xtype的意思
當然你要查詢上述的資料庫物件,要先切換到你想查的資料庫囉(USE DataBase_Name;)!
底下以 「NorthWind」資料庫查詢為對象
請注意,當中的「store」的值是決定要不要把 Query 結果給儲存起來,當 store=1 則不儲存,其他值會寫到同一個DB裡,建立名為「__T_all___」的資料表,每次會刪除重新建立。
| useNorthwind ; -- 更換成你要查詢的資料庫 DECLARE@tablename NVARCHAR(50)DECLARE @cloumnname NVARCHAR(50)DECLARE @store TINYINT SET @tablename='' -- 輸入要查詢的資料表,留下空的表示查全部 SET@cloumnname='' -- 輸入要查詢的欄位名稱,留下空的表示查全部 SET@store =2 -- 設定store != 1 會將結果暫存在 [__T_all___] 資料表, --請注意是否跟既有資料表同名 IF@store =1 -- store=1 只會顯示、傳回結果~不會儲存 BEGIN SELECT so.name 'Table',sc.name 'Column',st.name 'Type', sc.length 'Length' FROM sysobjects so INNER JOIN syscolumns sc ON so.id =sc.id INNER JOIN systypes st ON st.xtype=sc.xtype WHERE (so.type='U'AND st.name <> 'sysname') AND so.name LIKE '%'+@tablename+'%' AND sc.name LIKE '%'+@cloumnname+'%'ORDER BY1 END ELSE --不成立則存在[__T_all___] 資料表 BEGIN IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[__T_all___]') AND TYPE in (N'U'))DROP TABLE[__T_all___] SELECT so.name 'Table',sc.name 'Column',st.name 'Type', sc.length 'Length' INTO__T_all___ FROM sysobjectsso INNER JOIN syscolumns sc ON so.id =sc.id INNER JOIN systypes st ON st.xtype=sc.xtype WHERE (so.type='U'AND st.name <> 'sysname') AND so.name LIKE '%'+@tablename+'%' AND sc.name LIKE '%'+@cloumnname+'%'ORDER BY1 END |
多了欄位屬性與欄位大小,我想在做比對的時候,會準確更容易找到真正對應的欄位名稱。
另一個例子:搜尋 emp 相關欄位
SET@cloumnname='emp'
~ End
訂閱:
文章 (Atom)