每次都會忘記怎麼設定.
再這邊筆記一下.
參考資料:
HowTo:將SQL Server 2005設定為允許遠端連接
安裝完SQL SERVER2008後,登不進去
(組態工具內 建議將IPALL項目都改成1433其餘上方PORT全改成0)
啟用 SQL Server 2008 遠端連線(Enable Remote Connection)
2012年5月21日 星期一
2012年5月2日 星期三
難字寫入MSSQL資料庫變成?問號的解決方式
問題:
頁面已設定為UTF-8編碼,資料庫欄位也設定為nvarchar,但難字的部份仍然為?問號.是什麼狀況?
解決方式:
在SQL Command 裡面加上 N 就可以修復此問題.
範例如下:
UPDATE Mydb Set MyField = N'塵蟎' WHERE Mycode = '123'
INSERT INTO Mydb (MyField) VALUES(N'塵蟎')
頁面已設定為UTF-8編碼,資料庫欄位也設定為nvarchar,但難字的部份仍然為?問號.是什麼狀況?
解決方式:
在SQL Command 裡面加上 N 就可以修復此問題.
範例如下:
UPDATE Mydb Set MyField = N'塵蟎' WHERE Mycode = '123'
INSERT INTO Mydb (MyField) VALUES(N'塵蟎')
2012年1月13日 星期五
SQL資料庫備份檔(.bak)還原時出現錯誤
還原bak檔案時出現:
System.Data.SqlClient.SqlError: 備份組包含現有的 '資料庫名稱' 資料庫以外的資料庫備份。 (Microsoft.SqlServer.Express.Smo)
且無法還原.
System.Data.SqlClient.SqlError: 備份組包含現有的 '資料庫名稱' 資料庫以外的資料庫備份。 (Microsoft.SqlServer.Express.Smo)
且無法還原.
解法:
鍵入的程式碼
restore DATABASE NPUST
from disk='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\NPUST_backup_200812060300.bak'
with
move 'NPUST' to 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\NPUST.mdf',
move 'NPUST_Log' to 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\NPUST_log.ldf'
,NoRecovery
,Replace
go
※程式碼內的檔名跟路徑換成自己需要的。
然後再進行一次還原的手續即可.
restore DATABASE NPUST
from disk='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\NPUST_backup_200812060300.bak'
with
move 'NPUST' to 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\NPUST.mdf',
move 'NPUST_Log' to 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\NPUST_log.ldf'
,NoRecovery
,Replace
go
※程式碼內的檔名跟路徑換成自己需要的。
然後再進行一次還原的手續即可.
資料來源:
http://blog.yam.com/iamshiao/article/18601917
http://blog.yam.com/iamshiao/article/18601917
http://www.bestlong.idv.tw/thread-555-1-1.html
2011年7月15日 星期五
2011年7月12日 星期二
SQL隨機查詢的方法
資料來源:http://www.flatws.cn/article/program/mysql/2010-08-23/8791.html
SQL Server:
Select TOP N * From TABLE Order By NewID()
view plaincopy to clipboardprint?
Select TOP N * From TABLE Order By NewID()
Select TOP N * From TABLE Order By NewID()
NewID()函数将创建一个 uniqueidentifier 类型的唯一值。上面的语句实现效果是从Table中随机读取N条记录。
Access:
Select TOP N * From TABLE Order By Rnd(ID)
view plaincopy to clipboardprint?
Select TOP N * From TABLE Order By Rnd(ID)
Select TOP N * From TABLE Order By Rnd(ID)
Rnd(ID) 其中的ID是自动编号字段,可以利用其他任何数值来完成,比如用姓名字段(UserName)
Select TOP N * From TABLE Order BY Rnd(Len(UserName))
view plaincopy to clipboardprint?
Select TOP N * From TABLE Order BY Rnd(Len(UserName))
Select TOP N * From TABLE Order BY Rnd(Len(UserName))
MySql:
Select * From TABLE Order By Rand() Limit 10
view plaincopy to clipboardprint?
Select * From TABLE Order By Rand() Limit 10
Select * From TABLE Order By Rand() Limit 10
postgreSQL:
select * from glxt022 order by random() limit 5
view plaincopy to clipboardprint?
select * from glxt022 order by random() limit 5
SQL Server:
Select TOP N * From TABLE Order By NewID()
view plaincopy to clipboardprint?
Select TOP N * From TABLE Order By NewID()
Select TOP N * From TABLE Order By NewID()
NewID()函数将创建一个 uniqueidentifier 类型的唯一值。上面的语句实现效果是从Table中随机读取N条记录。
Access:
Select TOP N * From TABLE Order By Rnd(ID)
view plaincopy to clipboardprint?
Select TOP N * From TABLE Order By Rnd(ID)
Select TOP N * From TABLE Order By Rnd(ID)
Rnd(ID) 其中的ID是自动编号字段,可以利用其他任何数值来完成,比如用姓名字段(UserName)
Select TOP N * From TABLE Order BY Rnd(Len(UserName))
view plaincopy to clipboardprint?
Select TOP N * From TABLE Order BY Rnd(Len(UserName))
Select TOP N * From TABLE Order BY Rnd(Len(UserName))
MySql:
Select * From TABLE Order By Rand() Limit 10
view plaincopy to clipboardprint?
Select * From TABLE Order By Rand() Limit 10
Select * From TABLE Order By Rand() Limit 10
postgreSQL:
select * from glxt022 order by random() limit 5
view plaincopy to clipboardprint?
select * from glxt022 order by random() limit 5
2011年4月25日 星期一
[轉]如何使用 CAST 與 CONVERT 格式化日期與時間資料
資料來源:
http://ithelp.ithome.com.tw/question/10008820
SQL Server 的 CAST 與 CONVERT 可以讓我們明確地轉換運算式的資料型別,這次我們就是要討論如何使用這兩個函式來格式化日期與時間資料。
CAST 與 CONVERT 都提供類似的功能讓我們明確地轉換運算式的資料型別,我們就先看看 CONVERT 的語法:
由上面的語法可以看出來 CONVERT 擁有指定「日期格式樣式」的選項,就讓我們透過實際的例子來看看轉換效果:
執行結果:

接下來看 CAST 的語法:
與 CONVERT 相比,CAST 馬上就遜掉了,因為 CAST 沒有辦法指定日期格式樣式,如果要指定的話,勢必要自己加工過。
例如,我們要像 YYYY-MM-DD HH:MI:SS.sss 這樣的結果:
執行結果:

接下來我們直接透過實際的程式碼,討論如何把 AM 或 PM 換成中文的上午或下午:
執行結果:

最後,就以轉換西元日期成為民國年作為最後一個轉換的範例吧:
執行結果:
http://ithelp.ithome.com.tw/question/10008820
SQL Server 的 CAST 與 CONVERT 可以讓我們明確地轉換運算式的資料型別,這次我們就是要討論如何使用這兩個函式來格式化日期與時間資料。
CAST 與 CONVERT 都提供類似的功能讓我們明確地轉換運算式的資料型別,我們就先看看 CONVERT 的語法:
由上面的語法可以看出來 CONVERT 擁有指定「日期格式樣式」的選項,就讓我們透過實際的例子來看看轉換效果:
- -- 定義變數
- DECLARE @myDate DATETIME
- -- 指派一個日期給該變數
- SET @myDate = '2008/09/09 08:25 AM'
- -- 開始轉換
- PRINT CONVERT(CHAR(19), @myDate)
- PRINT CONVERT(CHAR(19), @myDate, 0)
- PRINT CONVERT(CHAR(8), @myDate, 1)
- PRINT CONVERT(CHAR(8), @myDate, 2)
- PRINT CONVERT(CHAR(8), @myDate, 3)
- PRINT CONVERT(CHAR(8), @myDate, 4)
- PRINT CONVERT(CHAR(8), @myDate, 5)
- PRINT CONVERT(CHAR(9), @myDate, 6)
- PRINT CONVERT(CHAR(10), @myDate, 7)
- PRINT CONVERT(CHAR(8), @myDate, 8)
- PRINT CONVERT(CHAR(26), @myDate, 9)
- PRINT CONVERT(CHAR(8), @myDate, 10)
- PRINT CONVERT(CHAR(8), @myDate, 11)
- PRINT CONVERT(CHAR(6), @myDate, 12)
- PRINT CONVERT(CHAR(24), @myDate, 13)
- PRINT CONVERT(CHAR(12), @myDate, 14)
- PRINT CONVERT(CHAR(19), @myDate, 20)
- PRINT CONVERT(CHAR(23), @myDate, 21)
- PRINT CONVERT(CHAR(20), @myDate, 22)
- PRINT CONVERT(CHAR(10), @myDate, 23)
- PRINT CONVERT(CHAR(8), @myDate, 24)
- PRINT CONVERT(CHAR(23), @myDate, 25)
- PRINT CONVERT(CHAR(19), @myDate, 100)
- PRINT CONVERT(CHAR(10), @myDate, 101)
- PRINT CONVERT(CHAR(10), @myDate, 102)
- PRINT CONVERT(CHAR(10), @myDate, 103)
- PRINT CONVERT(CHAR(10), @myDate, 104)
- PRINT CONVERT(CHAR(10), @myDate, 105)
- PRINT CONVERT(CHAR(11), @myDate, 106)
- PRINT CONVERT(CHAR(12), @myDate, 107)
- PRINT CONVERT(CHAR(8), @myDate, 108)
- PRINT CONVERT(CHAR(26), @myDate, 109)
- PRINT CONVERT(CHAR(10), @myDate, 110)
- PRINT CONVERT(CHAR(10), @myDate, 111)
- PRINT CONVERT(CHAR(8), @myDate, 112)
- PRINT CONVERT(CHAR(24), @myDate, 113)
- PRINT CONVERT(CHAR(12), @myDate, 114)
- PRINT CONVERT(CHAR(19), @myDate, 120)
- PRINT CONVERT(CHAR(23), @myDate, 121)
- PRINT CONVERT(CHAR(23), @myDate, 126)
- PRINT CONVERT(CHAR(23), @myDate, 127)
- PRINT CONVERT(CHAR(32), @myDate, 130)
- PRINT CONVERT(CHAR(25), @myDate, 131)
執行結果:
接下來看 CAST 的語法:
與 CONVERT 相比,CAST 馬上就遜掉了,因為 CAST 沒有辦法指定日期格式樣式,如果要指定的話,勢必要自己加工過。
例如,我們要像 YYYY-MM-DD HH:MI:SS.sss 這樣的結果:
- -- 定義變數
- DECLARE @myDate DATETIME
- -- 指派一個日期給該變數
- SET @myDate = '2008/09/09 08:25 AM'
- -- 開始轉換
- PRINT '使用 CONVERT 轉換 ==> ' +
- CONVERT(CHAR(23), @myDate, 21)
- PRINT '使用 CAST 轉換 =====> ' +
- CAST(DATEPART(YY, @myDate) AS CHAR(4)) + '-'
- + RIGHT(CAST(100 + DATEPART(MM, @myDate) AS CHAR(3)), 2) + '-'
- + RIGHT(CAST(100 + DATEPART(DD, @myDate) AS CHAR(3)), 2) + ' '
- + RIGHT(CAST(100 + DATEPART(HH, @myDate) AS CHAR(3)), 2) + ':'
- + RIGHT(CAST(100 + DATEPART(MI, @myDate) AS CHAR(3)), 2) + ':'
- + RIGHT(CAST(100 + DATEPART(SS, @myDate) AS CHAR(3)), 2) + '.'
- + RIGHT(CAST(1000+ DATEPART(MS, @myDate) AS CHAR(4)), 3)
執行結果:
接下來我們直接透過實際的程式碼,討論如何把 AM 或 PM 換成中文的上午或下午:
- DECLARE @myDate DATETIME
- SET @myDate = '2008/09/09 08:25 AM'
- SELECT CAST(DATEPART(YYYY, @myDate) AS CHAR(4)) + '/'
- + RIGHT(CAST(100 + DATEPART(MM, @myDate) AS CHAR(3)), 2) + '/'
- + RIGHT(CAST(100 + DATEPART(DD, @myDate) AS CHAR(3)), 2) + ' '
- + CASE WHEN DATEPART(HH, @myDate) < 13
- THEN RIGHT(CAST(100 + DATEPART(HH, @myDate) AS CHAR(3)), 2)
- ELSE CAST(DATEPART(HH, @myDate) - 12 AS CHAR(2))
- END + ':'
- + RIGHT(CAST(100 + DATEPART(MI, @myDate) AS CHAR(3)), 2)
- + CASE WHEN DATEPART(HH, @myDate) < 13
- THEN '上午'
- ELSE '下午'
- END
執行結果:
最後,就以轉換西元日期成為民國年作為最後一個轉換的範例吧:
- DECLARE @myDate DATETIME
- SET @myDate = '2008/09/09 08:25 AM'
- SELECT CAST(YEAR(@myDate) - 1911 AS NVARCHAR(3)) + '年'
- + CAST(Month(@myDate) AS NVARCHAR(2)) + '月'
- + CAST(Day(@myDate) AS NVARCHAR(2)) + '日'
執行結果:
2011年1月4日 星期二
DELETE 陳述式與COLUMN REFERENCE 條件約束衝突
狀況:
當按下刪除時,出現DELETE 陳述式與COLUMN REFERENCE 條件約束衝突錯誤.
發生原因:
在沒有清完參考到的子資料前就刪除主資料,才會發生這個錯誤訊息 .
解決方式:
如果確認是要刪除的話,先清子資料再刪主資料,就可以解決這個問題.
當按下刪除時,出現DELETE 陳述式與COLUMN REFERENCE 條件約束衝突錯誤.
發生原因:
在沒有清完參考到的子資料前就刪除主資料,才會發生這個錯誤訊息 .
解決方式:
如果確認是要刪除的話,先清子資料再刪主資料,就可以解決這個問題.
2010年12月4日 星期六
安裝 SQL Server 2008 Express with Tools ,提示【SQL Server 2005 Express Tools 需先移除】
資料來源:http://blog.miniasp.com/post/2008/08/Microsoft-SQL-Server-2008-Express-with-Tools-and-Advanced-Services-Released.aspx
安裝 SQL Server 2008 Express with Tools 的時候,有發現到安裝之前的檢查項目中還會提示【SQL Server 2005 Express Tools 需先移除】,你只要從控制台中的【新增或移除程式】將 Microsoft SQL Server Management Studio Express 移除即可。
安裝 SQL Server 2008 Express with Tools 的時候,有發現到安裝之前的檢查項目中還會提示【SQL Server 2005 Express Tools 需先移除】,你只要從控制台中的【新增或移除程式】將 Microsoft SQL Server Management Studio Express 移除即可。
SQL Server® 2008 R2 Express 版下載點
資料來源:http://alexchuo.blogspot.com/2010/07/sql-server-2008-r2-express.html
SQL Server® 2008 R2 Express 版下載點
隨著 SQL Server® 2008 R2 RTM 發行,SQL Server® 2008 R2 Express 版也問世了,茲將相關下載點整理如下:
- Microsoft® SQL Server® 2008 R2 Express
- Microsoft® SQL Server® 2008 R2 Express with Tools
- Microsoft® SQL Server® 2008 R2 Express with Advanced Services
- Microsoft® SQL Server® 2008 R2 Management Studio Express
|
2010年12月2日 星期四
使用SQL 2008 SSMS變更資料表出現"防止儲存需要資料表重建的變更"
資料來源:http://huwk.blogspot.com/2010/07/sql-2008-ssms.html
解決方法:SSMS 工具->選項->左邊選單 Designers,裡面把”防止儲存需要資料表重建的變更”,取消掉即可
解決方法:SSMS 工具->選項->左邊選單 Designers,裡面把”防止儲存需要資料表重建的變更”,取消掉即可
資料庫物件命名原則
資料來源:http://renjin.blogspot.com/2008/02/database-naming-conventions.html
程式設計使用命名慣例及有意義的名稱,會讓程式容易閱讀,而資料庫設計也應該如此。如果你希望自己的系統具可維護性(Maintainability),你就不應該草率的命名你的資料庫物件。採用命名原則的目的,是為了能夠讓資料庫物件名稱擁有足夠資訊,讓自己或是其他開發成員能清楚知道物件的類型及其使用目的。
本文將針對以下資料庫物件來說明:
所有的資料庫物件命名都應該遵循以下規則:
若因長度的限制而需要使用縮寫時,應遵從以下的規則:
資料表(Tables)
資料表應該使用複數名稱,例如:Employees。若名稱由多個單詞組成,則只有最後一個單詞使用複數,例如:UserRoles。
如果資料表是屬於多對多關聯性(Many-To-Many Relationship)的聯合資料表(Junction Table),也就是該資料表的主索引鍵是由由資料表 A 和資料表 B 兩者的外部索引鍵所組成,就要連結資料表 A 和資料表 B 的名稱來命名。例如,Authors 資料表和 Titles 資料表之間具有多對多關聯性,而你需要一個資料表來維持這兩個資料表彼此之間的多關聯性,則這個資料表就應該命名為 TitlesAuthors。
資料欄位(Columns)
因為資料欄位是資料表的成員,所以欄位名稱不應再列入冗餘的資料表名稱。
檢視表(Views)
檢視表應比照資料表命名規則,但為有別於資料表,應加入前綴詞以避免混淆,例如:vw_Users。
預儲程序(Stored Procedures)
{Table Name}_{Action}[Qualifier]
觸發程序(Triggers)
{Prefix}_{Table Name}_{Actions Covered}
其他參考【教學】 資料庫&資料表欄位命名規則
程式設計使用命名慣例及有意義的名稱,會讓程式容易閱讀,而資料庫設計也應該如此。如果你希望自己的系統具可維護性(Maintainability),你就不應該草率的命名你的資料庫物件。採用命名原則的目的,是為了能夠讓資料庫物件名稱擁有足夠資訊,讓自己或是其他開發成員能清楚知道物件的類型及其使用目的。
本文將針對以下資料庫物件來說明:
- 資料表(Tables)
- 資料欄位(Columns)
- 檢視表(Views)
- 預儲程序(Stored Procedures)
- 觸發程序(Triggers)
所有的資料庫物件命名都應該遵循以下規則:
- 若未超過長度,限制應避免使用縮寫。
- 使用 Pascal 大小寫命名法,前綴詞則使用 Camel 命名法。
- 使用英文字母或底線字元組合,數字應盡量避免。
- 不要以底線字元當字首
若因長度的限制而需要使用縮寫時,應遵從以下的規則:
- 縮寫的第一個字元應該與單詞的第一個字母相同。
- 兩個字母的縮略字使用全大寫字母,而三個以上之字元的縮略字則使用 Pascal 大小寫慣例。遵守命名慣例的範例:ID、DB、Sql。違反命名慣例的範例:Id、Db、SQL。
- 不要使用任何不被廣泛接受的縮略字。
資料表(Tables)
資料表應該使用複數名稱,例如:Employees。若名稱由多個單詞組成,則只有最後一個單詞使用複數,例如:UserRoles。
如果資料表是屬於多對多關聯性(Many-To-Many Relationship)的聯合資料表(Junction Table),也就是該資料表的主索引鍵是由由資料表 A 和資料表 B 兩者的外部索引鍵所組成,就要連結資料表 A 和資料表 B 的名稱來命名。例如,Authors 資料表和 Titles 資料表之間具有多對多關聯性,而你需要一個資料表來維持這兩個資料表彼此之間的多關聯性,則這個資料表就應該命名為 TitlesAuthors。
資料欄位(Columns)
因為資料欄位是資料表的成員,所以欄位名稱不應再列入冗餘的資料表名稱。
檢視表(Views)
檢視表應比照資料表命名規則,但為有別於資料表,應加入前綴詞以避免混淆,例如:vw_Users。
預儲程序(Stored Procedures)
{Table Name}_{Action}[Qualifier]
- Table Name:預儲程序主要作用的資料表名稱。如果沒有作用在資料表上,就使用 Util(Utility的簡寫)來命名。
- Action:這部份指的是作用到資料表的主要動作,例如:Create、Get、Update、Delete。如果是 Util 程序,這個部份就不一定要加上。
- Qualifier:可以選擇性用來更清楚描述這個預儲程序要進行的動作。
觸發程序(Triggers)
{Prefix}_{Table Name}_{Actions Covered}
- Prefix:使用 trg_ 做為前綴詞,以別於其他資料庫物件。
- Table Name:執行觸發程序所在的資料表名稱。
- Actions Covered: 啟動觸發程序的 Insert、Update、Delete 選項。在此用 "Ins"、"Upd"、"Del" 來描述。
其他參考【教學】 資料庫&資料表欄位命名規則
訂閱:
文章 (Atom)