設計好的網站,在單機執行都正常,但是放到主機端執行時卻要等20幾秒,後來發現是SQL主機沒開放網頁主機瀏覽權限。
請組長設定一下就好了。^_^
2018年6月1日 星期五
2017年12月6日 星期三
備忘:簡易弄懂 MYSQL 的 JOIN用法 (LEFT JOIN , RIGHT JOIN 使用時機)
參考資料來源:http://blog.webgolds.com/view/189
table2
接下來就來測試inner join囉!!
Syntax
看看得到的結果:

接下來換LEFT JOIN囉!
Syntax
看看得到的結果:
結果說明:
Left join是以A表的記錄為基礎的,A可以看成左表,B可以看成右表,left join是以左表為準的.
換句話說,左表(A)的記錄將會全部表示出來,而右表(B)只會顯示符合搜索條件的記錄(例子中為: A.aID = B.bID).
B表記錄不足的地方均為NULL.
那麼RIGHT JOIN會是如何呢?
Syntax
看看得到的結果:
哇,可以看到跟LEFT的情況倒過來了呢。
另外,很多人都不知道JOIN裡面USING 跟 ON 的差異在哪裡?
以我們剛剛第一個例子來說:
所以其實也可以寫成這樣喔:
對於inner join, outer join , left join , right join還是很模糊嗎?
沒關係,這邊提供最簡易的SQL版本,
輕鬆好上手。
首先,我們先建立2個資料表,分別是table1跟table2。
table1
沒關係,這邊提供最簡易的SQL版本,
輕鬆好上手。
首先,我們先建立2個資料表,分別是table1跟table2。
table1
| id |
| 210 |
| 211 |
| 212 |
| 213 |
CREATE TABLE `table1` (
`id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `table1` (`id`) VALUES
(210),
(211),
(212),
(213);
-- 2016-02-09 23:16:25
`id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `table1` (`id`) VALUES
(210),
(211),
(212),
(213);
-- 2016-02-09 23:16:25
table2
| id |
| 210 |
| 214 |
| 215 |
| 212 |
| 212 |
CREATE TABLE `table2` (
`id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
#台灣金站
INSERT INTO `table2` (`id`) VALUES
(210),
(214),
(215),
(212),
(212);
-- 2016-02-09 23:17:01
`id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
#台灣金站
INSERT INTO `table2` (`id`) VALUES
(210),
(214),
(215),
(212),
(212);
-- 2016-02-09 23:17:01
接下來就來測試inner join囉!!
Syntax
SELECT a.id, b.id
FROM table1 as a
INNER JOIN table2 as b
ON a.id= b.id
FROM table1 as a
INNER JOIN table2 as b
ON a.id= b.id
看看得到的結果:
| id | id |
| 210 | 210 |
| 212 | 212 |
| 212 | 212 |

接下來換LEFT JOIN囉!
Syntax
SELECT a.id, b.id
FROM table1 as a
LEFT JOIN table2 as b
ON a.id= b.id
FROM table1 as a
LEFT JOIN table2 as b
ON a.id= b.id
看看得到的結果:
| a.id | b.id |
| 210 | 210 |
| 211 | null |
| 212 | 212 |
| 212 | 212 |
| 213 | null |
結果說明:
Left join是以A表的記錄為基礎的,A可以看成左表,B可以看成右表,left join是以左表為準的.
換句話說,左表(A)的記錄將會全部表示出來,而右表(B)只會顯示符合搜索條件的記錄(例子中為: A.aID = B.bID).
B表記錄不足的地方均為NULL.
那麼RIGHT JOIN會是如何呢?
Syntax
SELECT a.id, b.id
FROM table1 as a
RIGHT JOIN table2 as b
ON a.id= b.id
FROM table1 as a
RIGHT JOIN table2 as b
ON a.id= b.id
看看得到的結果:
| a.id | b.id |
| 210 | 210 |
| null | 214 |
| null | 215 |
| 212 | 212 |
| 212 | 212 |
哇,可以看到跟LEFT的情況倒過來了呢。
另外,很多人都不知道JOIN裡面USING 跟 ON 的差異在哪裡?
以我們剛剛第一個例子來說:
#範例 B-1
SELECT a.id, b.id
FROM table1 as a
INNER JOIN table2 as b
ON a.id= b.id
由於我們的欄位都是共同為ID這個名稱(two tables share a column of the exact same name ),SELECT a.id, b.id
FROM table1 as a
INNER JOIN table2 as b
ON a.id= b.id
所以其實也可以寫成這樣喔:
#範例 B-2
SELECT a.id, b.id
FROM table1 as a
INNER JOIN table2 as b
USING (id)
範例 B-1跟範例 B-2 執行結果都會得到一樣。SELECT a.id, b.id
FROM table1 as a
INNER JOIN table2 as b
USING (id)
2017年11月6日 星期一
SSMS 新增一個帳號,無法關閉強制帳號原則?
我在 SQL Server 2016 新增一個使用者,但我不想登入時變更密碼,並且關閉下面2個強制原則:
□強制執行密碼原則
□強制執行密碼逾期
關閉時會出現下面錯誤訊息:
當MUST_CHANGE為ON時,CHECK_POLICY和CHECK_EXPIRATION選項不能被關閉。
解決方案:
要解決這個問題,您首先必須要更改密碼,而不必更改密碼策略的選項。
你可以把密碼更改成與現有的密碼相同。^_^
但是,你仍然必須要改變密碼!^_^(我不太懂這是什麼邏輯?)
您可以利用SSMS 的查詢介面 GUI 來完成,我蠻喜歡使用腳本的,因為它給了我靈活的操作方式。
先利用下面的步驟,變更第一次密碼,我設定成相同的密碼,就可以解決“用戶必須更改密碼”訊息。
USE Master
GO
ALTER LOGIN [Login Name] WITH PASSWORD = 'Same Password'
GO
現在讓我們關閉 passowrd 原則。
ALTER LOGIN [Login Name] WITH
CHECK_POLICY = OFF,
CHECK_EXPIRATION = OFF;
或者直接把勾勾取消也已經可以了!^_^
2017年6月19日 星期一
行事曆推撥管理(SQL 指令)
下列虛擬測試(非真實表)
於 CalPushMan 資料庫
建立 CalPushMan 資料表
CREATE TABLE CalPush (
UID varchar(40) PRIMARY KEY NOT NULL,
DTSTART varchar(20) NOT NULL,
DTEND varchar(20) NOT NULL,
SUMMARY varchar(MAX) DEFAULT '' NOT NULL,
LOCATION varchar(MAX) DEFAULT '' NOT NULL,
DESCRIPTION varchar(MAX) DEFAULT '' NOT NULL,
PushGroup varchar(MAX) DEFAULT '' NOT NULL,
AutoPush bit DEFAULT 0 NOT NULL,
PushStatus varchar(10) DEFAULT '' NOT NULL,
)
==============================================================
建立 CalPushManSet 資料表
CREATE TABLE CalPushManSet (
SetNum int PRIMARY KEY IDENTITY NOT NULL,
Unit varchar(40) NOT NULL,
IcalUrl varchar(256) NOT NULL,
)
==============================================================
建立 CalPushAccount 資料表
CREATE TABLE CalPushAccount (
AccountNum int PRIMARY KEY IDENTITY NOT NULL,
AccountlID varchar(20) NOT NULL,
AccountStaffLevel varchar(10) NOT NULL,
)
==============================================================
說明:
CREATE TABLE CalPush (
<====建立資料表 CalPush
UID varchar(40) PRIMARY KEY NOT NULL,
<====建立欄位UID,變動長度字串(最大40位元,設為PK,不能為 NULL 空值
DTSTART varchar(20) NOT NULL,
DTEND varchar(20) NOT NULL,
SUMMARY varchar(MAX) DEFAULT '' NOT NULL,
<====建立欄位SUMMARY,變動長度字串(最大2GB,預設為'空'字串,不能為 NULL 空值
LOCATION varchar(MAX) DEFAULT '' NOT NULL,
DESCRIPTION varchar(MAX) DEFAULT '' NOT NULL,
PushGroup varchar(MAX) DEFAULT '' NOT NULL,
AutoPush bit DEFAULT 0 NOT NULL,
PushStatus varchar(10) DEFAULT '' NOT NULL,
)
SetNum int PRIMARY KEY IDENTITY NOT NULL,
<====建立欄位SetNum,整數資料,自動遞增(開始,遞增)預設都為1,不能為 NULL 空值
於 CalPushMan 資料庫
建立 CalPushMan 資料表
CREATE TABLE CalPush (
UID varchar(40) PRIMARY KEY NOT NULL,
DTSTART varchar(20) NOT NULL,
DTEND varchar(20) NOT NULL,
SUMMARY varchar(MAX) DEFAULT '' NOT NULL,
LOCATION varchar(MAX) DEFAULT '' NOT NULL,
DESCRIPTION varchar(MAX) DEFAULT '' NOT NULL,
PushGroup varchar(MAX) DEFAULT '' NOT NULL,
AutoPush bit DEFAULT 0 NOT NULL,
PushStatus varchar(10) DEFAULT '' NOT NULL,
)
==============================================================
建立 CalPushManSet 資料表
CREATE TABLE CalPushManSet (
SetNum int PRIMARY KEY IDENTITY NOT NULL,
Unit varchar(40) NOT NULL,
IcalUrl varchar(256) NOT NULL,
)
==============================================================
建立 CalPushAccount 資料表
CREATE TABLE CalPushAccount (
AccountNum int PRIMARY KEY IDENTITY NOT NULL,
AccountlID varchar(20) NOT NULL,
AccountStaffLevel varchar(10) NOT NULL,
)
==============================================================
說明:
CREATE TABLE CalPush (
<====建立資料表 CalPush
UID varchar(40) PRIMARY KEY NOT NULL,
<====建立欄位UID,變動長度字串(最大40位元,設為PK,不能為 NULL 空值
DTSTART varchar(20) NOT NULL,
DTEND varchar(20) NOT NULL,
SUMMARY varchar(MAX) DEFAULT '' NOT NULL,
<====建立欄位SUMMARY,變動長度字串(最大2GB,預設為'空'字串,不能為 NULL 空值
LOCATION varchar(MAX) DEFAULT '' NOT NULL,
DESCRIPTION varchar(MAX) DEFAULT '' NOT NULL,
PushGroup varchar(MAX) DEFAULT '' NOT NULL,
AutoPush bit DEFAULT 0 NOT NULL,
PushStatus varchar(10) DEFAULT '' NOT NULL,
)
SetNum int PRIMARY KEY IDENTITY NOT NULL,
<====建立欄位SetNum,整數資料,自動遞增(開始,遞增)預設都為1,不能為 NULL 空值
2017年6月6日 星期二
公告推撥系統~紀錄 (轉C#,使用VS2017+ASP.NET Code 1.1)
建立專案
加入會用到的 NuGet 模組
加入資料庫通用模組
ConnDB
★using WebMatrix.Data;
把資料庫,反向工程,轉成XXXXXX.cs Models 函式
VS2017
工具>NgGet封裝管理員>套件管理器主控台
執行下列命令 (""裡的字串,是複製資料表>屬性>連接字串)
PM>scaffold-dbcontext "Data Source=資料庫IP;Initial Catalog=資料表;Integrated Security=False;User ID=使用者;Password=密碼;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" Microsoft.EntityFrameworkCore.SqlServer -force
會轉出如下資料
- [檔案]->[新增]->[專案]
- Visual C#->Web->ASP.NET Web 應用程式(.NET Framework)
- 名稱:
- 方案名稱:
- 選 MVC
加入會用到的 NuGet 模組
- Install-Package WebMatrix.Data (會安裝 Microsoft.AspNet.WebPages.Data 及 WebMatrix.Data)
加入資料庫通用模組
ConnDB
★using WebMatrix.Data;
把資料庫,反向工程,轉成XXXXXX.cs Models 函式
VS2017
工具>NgGet封裝管理員>套件管理器主控台
執行下列命令 (""裡的字串,是複製資料表>屬性>連接字串)
PM>scaffold-dbcontext "Data Source=資料庫IP;Initial Catalog=資料表;Integrated Security=False;User ID=使用者;Password=密碼;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False" Microsoft.EntityFrameworkCore.SqlServer -force
會轉出如下資料
using System; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata; namespace 公告推撥系統 { public partial class NTTU_BulletinContext : DbContext { public virtual DbSet<MainBulletin> MainBulletin { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { #warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings. optionsBuilder.UseSqlServer(@"Data Source=xxx.xxx.xxx.xxx;Initial Catalog=資料表;Integrated Security=False;User ID=帳號;Password=密碼;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"); } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<MainBulletin>(entity => { entity.HasKey(e => e.BulletinNumber) .HasName("PK_main_bulletin"); entity.ToTable("main_bulletin"); entity.Property(e => e.BulletinNumber) .HasColumnName("bulletin_number") .ValueGeneratedNever(); entity.Property(e => e.ActivityPost).HasColumnName("activity_post"); entity.Property(e => e.BulletinContent) .HasColumnName("bulletin_content") .HasColumnType("varchar(max)"); entity.Property(e => e.BulletinTitle) .HasColumnName("bulletin_title") .HasColumnType("varchar(max)"); entity.Property(e => e.DraftBoolean).HasColumnName("draft_boolean"); entity.Property(e => e.FilePath) .HasColumnName("file_path") .HasColumnType("varchar(250)"); entity.Property(e => e.MeetingPost).HasColumnName("meeting_post"); entity.Property(e => e.OpenPost).HasColumnName("open_post"); entity.Property(e => e.PostDateTime) .HasColumnName("post_date_time") .HasColumnType("smalldatetime"); entity.Property(e => e.PostEmail) .HasColumnName("post_email") .HasColumnType("varchar(100)"); entity.Property(e => e.PostRemind).HasColumnName("post_remind"); entity.Property(e => e.PostUnit) .IsRequired() .HasColumnName("post_unit") .HasColumnType("varchar(100)"); entity.Property(e => e.StartDateTime) .HasColumnName("start_date_time") .HasColumnType("smalldatetime"); entity.Property(e => e.StopDateTime) .HasColumnName("stop_date_time") .HasColumnType("smalldatetime"); }); } } }
2016年12月19日 星期一
MS SQL 常用資料型態一覽表
| 資料型別 | 說明 |
| INT | 長度為 4 個 bytes;介於 -2,147,483,648 與 2,147,483,647 間的整數 |
| SMALLINT | 長度為 2 個 bytes;介於 -32,768 與 32,767 間的整數 |
| TINYINT | 長度為 1 個 bytes;介於 0 與 255 間的整數 |
| BIGINT | 長度為 8 個 bytes;介於 -2^63 與 2^63-1 間的整數 |
| BIT | 只佔用一個位元,且不允許存放 NULL 值 |
| 資料型別 | 說明 |
| DECIMAL[(p[,s])] | 使用 2 到 17 個 bytes 來儲存資料,可儲存的值介於 -1038-1 與 1038-1 之間;p 用來定義小數點兩邊可以被儲存的位數總數目,而 s 代表小數點右邊的有效位數(s < p);p的預設值為 18 而 s 的預設值為0 |
| NUMERIC[(p[,s])] | 與 DECIMAL[(p[,s])] 同 |
| 資料型別 | 說明 |
| FLOAT[(n)] | n 是儲存 float 數字的小數位數,介於 1 與 53 間;若 n 介於 1 與 24 間,儲存大小為 4 個 bytes,有效位數為 7 位數;若 n 介於 25 與 53 間,儲存大小為 8 個 bytes,有效位數為 15 位數 |
| REAL | 長度為 4 個 bytes;介於 -3.4E-38 與 3.4E+38 間的浮點數;與 FLOAT(24) 相同 |
| 資料型別 | 說明 |
| DATETIME | 長度為 8 個 bytes;介於 1/1/1753 與 12/31/9999 間的日期時間 |
| SMALLDATETIME | 長度為 4 個 bytes;介於 1/1/1900 與 6/6/2079間的日期時間 |
| 資料型別 | 說明 |
| CHAR[(n)] | 固定長度為 n 的字元型態,n 必須介於 1 與 8000 之間 |
| VARCHAR[(n)] | 與 CHAR 相同,只是若輸入的資料小於 n,資料庫不會自動補空格,因此為變動長度之字串 |
| TEXT | 用來儲存大量的(可高達兩億個位元組)字元資料,儲存空間以 8k 為單位動態增加 |
| 資料型別 | 說明 |
| NCHAR | 與 CHAR 相同,只是每一個字元為兩個 bytes 的 unicode,且 n 最大為 4000 |
| NVARCHAR | 與 VARCHAR 相同,只是每一個字元為兩個 bytes 的 unicode,且 n 最大為 4000 |
| NTEXT | 和 TEXT 雷同,只是儲存的是 Unicode 資料 |
| 資料型別 | 說明 |
| BINARY[(n)] | 固定長度為 n+4 個 bytes; n 為 1 到 8000 的值,輸入的值必需符合兩個條件:(1) 每一個值皆為 0-9、a-f 的值;(2)每一個值的前面必須有 0X |
| VARBINARY[(n)] | 與 BINARY 相同,只是若輸入的資料小於 n,資料庫不會自動補 0,因此長度為變動的 |
| IMAGE | 和 TEXT 雷同,只是儲存的是影像資料 |
| 資料型別 | 說明 |
| MONEY | 長度為 8 個 bytes 的整數,小數點的精確度取四位 |
| SMALLMONEY | 長度為 4 個 bytes 的整數,小數點的精確度取四位 |
| 資料型別 | 說明 |
| TIMESTAMP | 8 bytes 的 16 進位值 |
| UNIQUEIDENTIFIER | 16 bytes 的 16 進位值 |
| 資料型別 | 說明 |
| SQL_VARIANT | 此資料型別可儲存 text、ntext、timestamp 與 sql_variant 以外的各種 SQL Server 支援的資料型別。 |
| CURSOR | 查詢結果的資料集 (註:2005) |
| TABLE | 表格型式的資料 (註:2005) |
資料來源 : google 搜尋到的,如有侵害著作權請來信通知
2016年11月18日 星期五
還原 Adventure Works 2014 sample database 到 SQL Server 2016 evaluation
還原 Adventure Works 2014 sample database 到 SQL Server 2016 evaluation(180天)試用版。[環境為windows 10]
分享來源:Code-Programming
分享來源:Code-Programming
訂閱:
文章 (Atom)
cas server 一直圈圈或取得狀態異常
重點: cas server 不能開 VPN,會造成取的來源 dns 異常,會一直轉圈圈或等很久。
-
LDAP Server 架好了,但要用指令新增、刪除、修改,快瘋了!>_< 後來發現居然有 GUI 介面的管理程式,以下簡列,未來會補上操作介面! 一、JXplorer – A Java Ldap Browser http://sourceforge.ne...
-
開啟(建立)檔案 fopen () :打開文件檔案或是 url 網址,如果打開失敗,函數返回 false 語法: fopen ( filename , mode , include_path , context ) 參數說明: file...
-
我在 SQL Server 2016 新增一個使用者,但我不想登入時變更密碼,並且關閉下面2個強制原則: □ 強制執行密碼原則 □ 強制執行密碼逾期 關閉時會出現下面錯誤訊息: 當MUST_CHANGE為ON時,CHECK_POLICY和CHECK_EXPIRA...