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

2012年5月21日 星期一

將SQL Server 2005設定為允許遠端連接

每次都會忘記怎麼設定.
再這邊筆記一下.
參考資料:

HowTo:將SQL Server 2005設定為允許遠端連接

安裝完SQL SERVER2008後,登不進去
(組態工具內 建議將IPALL項目都改成1433其餘上方PORT全改成0)

啟用 SQL Server 2008 遠端連線(Enable Remote Connection)


2012年5月2日 星期三

難字寫入MSSQL資料庫變成?問號的解決方式

問題:
頁面已設定為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)
且無法還原.

解法:
鍵入的程式碼
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://www.bestlong.idv.tw/thread-555-1-1.html

2011年7月15日 星期五

利用 SQL 找出欄位值重覆的記錄

資料來源:http://killworm737.pixnet.net/blog/post/21934570

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

2011年4月25日 星期一

[轉]如何使用 CAST 與 CONVERT 格式化日期與時間資料

資料來源:
http://ithelp.ithome.com.tw/question/10008820

SQL Server 的 CAST 與 CONVERT 可以讓我們明確地轉換運算式的資料型別,這次我們就是要討論如何使用這兩個函式來格式化日期與時間資料。


CAST 與 CONVERT 都提供類似的功能讓我們明確地轉換運算式的資料型別,我們就先看看 CONVERT 的語法:

  1. CONVERT ( 資料型別 [ (資料長度) ] , 運算式 [ , 日期格式樣式 ] )  


由上面的語法可以看出來 CONVERT 擁有指定「日期格式樣式」的選項,就讓我們透過實際的例子來看看轉換效果:
  1. -- 定義變數  
  2. DECLARE @myDate DATETIME  
  3. -- 指派一個日期給該變數  
  4. SET @myDate = '2008/09/09 08:25 AM'  
  5.   
  6. -- 開始轉換  
  7. PRINT CONVERT(CHAR(19), @myDate)  
  8. PRINT CONVERT(CHAR(19), @myDate, 0)  
  9. PRINT CONVERT(CHAR(8),  @myDate, 1)  
  10. PRINT CONVERT(CHAR(8),  @myDate, 2)  
  11. PRINT CONVERT(CHAR(8),  @myDate, 3)  
  12. PRINT CONVERT(CHAR(8),  @myDate, 4)  
  13. PRINT CONVERT(CHAR(8),  @myDate, 5)  
  14. PRINT CONVERT(CHAR(9),  @myDate, 6)  
  15. PRINT CONVERT(CHAR(10), @myDate, 7)  
  16. PRINT CONVERT(CHAR(8),  @myDate, 8)  
  17. PRINT CONVERT(CHAR(26), @myDate, 9)  
  18. PRINT CONVERT(CHAR(8),  @myDate, 10)  
  19. PRINT CONVERT(CHAR(8),  @myDate, 11)  
  20. PRINT CONVERT(CHAR(6),  @myDate, 12)  
  21. PRINT CONVERT(CHAR(24), @myDate, 13)  
  22. PRINT CONVERT(CHAR(12), @myDate, 14)  
  23. PRINT CONVERT(CHAR(19), @myDate, 20)  
  24. PRINT CONVERT(CHAR(23), @myDate, 21)  
  25. PRINT CONVERT(CHAR(20), @myDate, 22)  
  26. PRINT CONVERT(CHAR(10), @myDate, 23)  
  27. PRINT CONVERT(CHAR(8),  @myDate, 24)  
  28. PRINT CONVERT(CHAR(23), @myDate, 25)  
  29. PRINT CONVERT(CHAR(19), @myDate, 100)  
  30. PRINT CONVERT(CHAR(10), @myDate, 101)  
  31. PRINT CONVERT(CHAR(10), @myDate, 102)  
  32. PRINT CONVERT(CHAR(10), @myDate, 103)  
  33. PRINT CONVERT(CHAR(10), @myDate, 104)  
  34. PRINT CONVERT(CHAR(10), @myDate, 105)  
  35. PRINT CONVERT(CHAR(11), @myDate, 106)  
  36. PRINT CONVERT(CHAR(12), @myDate, 107)  
  37. PRINT CONVERT(CHAR(8),  @myDate, 108)  
  38. PRINT CONVERT(CHAR(26), @myDate, 109)  
  39. PRINT CONVERT(CHAR(10), @myDate, 110)  
  40. PRINT CONVERT(CHAR(10), @myDate, 111)  
  41. PRINT CONVERT(CHAR(8),  @myDate, 112)  
  42. PRINT CONVERT(CHAR(24), @myDate, 113)  
  43. PRINT CONVERT(CHAR(12), @myDate, 114)  
  44. PRINT CONVERT(CHAR(19), @myDate, 120)  
  45. PRINT CONVERT(CHAR(23), @myDate, 121)  
  46. PRINT CONVERT(CHAR(23), @myDate, 126)  
  47. PRINT CONVERT(CHAR(23), @myDate, 127)  
  48. PRINT CONVERT(CHAR(32), @myDate, 130)  
  49. PRINT CONVERT(CHAR(25), @myDate, 131)  


執行結果:


接下來看 CAST 的語法:
  1. CAST (運算式 AS 資料型別 [ (資料長度) ])  


與 CONVERT 相比,CAST 馬上就遜掉了,因為 CAST 沒有辦法指定日期格式樣式,如果要指定的話,勢必要自己加工過。
例如,我們要像 YYYY-MM-DD HH:MI:SS.sss 這樣的結果:
  1. -- 定義變數  
  2. DECLARE @myDate DATETIME  
  3. -- 指派一個日期給該變數  
  4. SET @myDate = '2008/09/09 08:25 AM'  
  5.   
  6. -- 開始轉換  
  7. PRINT '使用 CONVERT 轉換 ==> ' +  
  8.     CONVERT(CHAR(23), @myDate, 21)  
  9. PRINT '使用 CAST 轉換 =====> ' +  
  10.     CAST(DATEPART(YY, @myDate) AS CHAR(4)) + '-'  
  11.     + RIGHT(CAST(100 + DATEPART(MM, @myDate) AS CHAR(3)), 2) + '-'  
  12.     + RIGHT(CAST(100 + DATEPART(DD, @myDate) AS CHAR(3)), 2) + ' '  
  13.     + RIGHT(CAST(100 + DATEPART(HH, @myDate) AS CHAR(3)), 2) + ':'  
  14.     + RIGHT(CAST(100 + DATEPART(MI, @myDate) AS CHAR(3)), 2) + ':'  
  15.     + RIGHT(CAST(100 + DATEPART(SS, @myDate) AS CHAR(3)), 2) + '.'  
  16.     + RIGHT(CAST(1000+ DATEPART(MS, @myDate) AS CHAR(4)), 3)  


執行結果:


接下來我們直接透過實際的程式碼,討論如何把 AM 或 PM 換成中文的上午或下午:
  1. DECLARE @myDate DATETIME  
  2. SET @myDate = '2008/09/09 08:25 AM'  
  3. SELECT CAST(DATEPART(YYYY, @myDate) AS CHAR(4)) + '/'   
  4.     + RIGHT(CAST(100 + DATEPART(MM, @myDate) AS CHAR(3)), 2) + '/'  
  5.     + RIGHT(CAST(100 + DATEPART(DD, @myDate) AS CHAR(3)), 2) + ' '  
  6.     + CASE WHEN DATEPART(HH, @myDate) < 13  
  7.         THEN RIGHT(CAST(100 + DATEPART(HH, @myDate) AS CHAR(3)), 2)  
  8.         ELSE CAST(DATEPART(HH, @myDate) - 12 AS CHAR(2))  
  9.     END + ':'  
  10.     + RIGHT(CAST(100 + DATEPART(MI, @myDate) AS CHAR(3)), 2)  
  11.     + CASE WHEN DATEPART(HH, @myDate) < 13  
  12.         THEN '上午'  
  13.         ELSE '下午'  
  14.     END  


執行結果:


最後,就以轉換西元日期成為民國年作為最後一個轉換的範例吧:
  1. DECLARE @myDate DATETIME  
  2. SET @myDate = '2008/09/09 08:25 AM'  
  3. SELECT CAST(YEAR(@myDate) - 1911 AS NVARCHAR(3)) + '年'  
  4.     + CAST(Month(@myDate) AS NVARCHAR(2)) + '月'  
  5.     + CAST(Day(@myDate) AS NVARCHAR(2)) + '日'  


執行結果:

2011年1月4日 星期二

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 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 版也問世了,茲將相關下載點整理如下:
附註

2010年12月2日 星期四

使用SQL 2008 SSMS變更資料表出現"防止儲存需要資料表重建的變更"

資料來源:http://huwk.blogspot.com/2010/07/sql-2008-ssms.html

解決方法:SSMS 工具->選項->左邊選單 Designers,裡面把”防止儲存需要資料表重建的變更”,取消掉即可

資料庫物件命名原則

資料來源:http://renjin.blogspot.com/2008/02/database-naming-conventions.html

程式設計使用命名慣例及有意義的名稱,會讓程式容易閱讀,而資料庫設計也應該如此。如果你希望自己的系統具可維護性(Maintainability),你就不應該草率的命名你的資料庫物件。採用命名原則的目的,是為了能夠讓資料庫物件名稱擁有足夠資訊,讓自己或是其他開發成員能清楚知道物件的類型及其使用目的。

本文將針對以下資料庫物件來說明:
  1. 資料表(Tables)
  2. 資料欄位(Columns)
  3. 檢視表(Views)
  4. 預儲程序(Stored Procedures)
  5. 觸發程序(Triggers)

所有的資料庫物件命名都應該遵循以下規則:
  1. 若未超過長度,限制應避免使用縮寫。
  2. 使用 Pascal 大小寫命名法,前綴詞則使用 Camel 命名法。
  3. 使用英文字母或底線字元組合,數字應盡量避免。
  4. 不要以底線字元當字首

若因長度的限制而需要使用縮寫時,應遵從以下的規則:
  1. 縮寫的第一個字元應該與單詞的第一個字母相同。
  2. 兩個字母的縮略字使用全大寫字母,而三個以上之字元的縮略字則使用 Pascal 大小寫慣例。遵守命名慣例的範例:ID、DB、Sql。違反命名慣例的範例:Id、Db、SQL。
  3. 不要使用任何不被廣泛接受的縮略字。

資料表(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" 來描述。
其他參考[問題回答]資料庫物件命名原則?
其他參考【教學】 資料庫&資料表欄位命名規則