###### tags: `Sql`,`2022`,`continue` # Sql Server 語法筆記 ## Select Into 從某資料表查詢所得的結果新增到另一個新建的資料表中。 常用來複製備份資料表,或將資料表輸出至另一資料庫中。 備份資料表到customers_backup ``` sql --備份資料表 SELECT * INTO customers_backup FROM customers; --備份資料表到其他DB SELECT * INTO customers_backup IN 'backup.mdb' FROM customers; --只複製資料表結構 SELECT * INTO new_table_name FROM table_name WHERE 0=1; ``` ## 索引相關語法 exec sp_updatestats : 可以更即時更新 SQL Server 統計資料 exec sp_helpindex [Table Name]: 查詢某資料表所有的 index , 描述及鍵值屬性 ## 交易隔離等級 vs with no lock with nolock 是Hint 的一種,Hints 的設計目的是爲了能夠讓 SQL 語句在運行時,動態修改查詢優化器的行爲。 :exclamation: 但是 微軟官方告訴大家**不要用 hint 來改變查詢優化器**:exclamation: 所以如果想要取代 with nolock,可以使用交易隔離等級來達到同樣的效果。 ```sql SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; ``` 交易隔離等級是針對整個DB去做設定,不像 with nolock 是針對每個下的查詢指令去影響當下的TABLE ### 交易隔離等級 * read uncommited :至少保證:「A交易已更新但尚未確認的資料,B交易僅可作讀取動作」。 * read commited:比read uncommited嚴格一些,至少要保證:「交易讀取的資料必須是已確認的資料」。 * repeatable read:比read commited嚴格,至少保證:「同一交易內兩次讀取的資料必須相同」 * serializable:最嚴格的隔離層級,只要有資料不一致的疑慮,交易必須可以循序,也就是一個一個來(正是serializable名稱的由來)。基本作法是…A交易讀取時,B交易若要更新,就必須循序,A交易更新時,B交易無論讀取或更新都必須循序。 ### 預設的等級 * MSSQL : read commited * Oracle : read uncommited * MySQL :Repeatable Read ## 新增資料庫執行者角色 ```sql= CREATE ROLE db_executor; GRANT EXECUTE TO db_executor; ``` ##### Reference [sql語法](https://www.fooish.com/sql/select-into.html) {%hackmd BJrTq20hE %}
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up