SQLServer語句彙總

1.---視圖
https://docs.microsoft.com/zh-cn/sql/t-sql/statements/create-view-transact-sql?view=sql-server-2017

--語法
-- Syntax for SQL Server and Azure SQL Database  
  
CREATE [ OR ALTER ] VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ]   
[ WITH <view_attribute> [ ,...n ] ]   
AS select_statement   
[ WITH CHECK OPTION ]   
[ ; ]  
  
<view_attribute> ::=   
{  
    [ ENCRYPTION ]  
    [ SCHEMABINDING ]  
    [ VIEW_METADATA ]       
}


---可更新的視圖
    只要滿足下列條件,即可通過視圖修改基礎基表的數據:
        1. 任何修改(包括 UPDATE、INSERT 和 DELETE 語句)都只能引用一個基表的列。
        2. 視圖中被修改的列必須直接引用表列中的基礎數據。 不能通過任何其他方式對這些列進行派生,如通過以下方式:
            2.1 聚合函數:AVG、COUNT、SUM、MIN、MAX、GROUPING、STDEV、STDEVP、VAR 和 VARP。
            2.2 計算。 不能從使用其他列的表達式中計算該列。 使用集合運算符 UNION、UNION ALL、CROSSJOIN、EXCEPT 和 INTERSECT 形成的列將計入計算結果,且不可更新。
        3. 被修改的列不受 GROUP BY、HAVING 或 DISTINCT 子句的影響。
        4. TOP 在視圖的 select_statement 中的任何位置都不會與 WITH CHECK OPTION 子句一起使用 。
    上述限制應用於視圖的 FROM 子句中的任何子查詢,就像其應用於視圖本身一樣。 通常情況下,數據庫引擎必須能夠明確跟蹤從視圖定義到一個基表的修改。 有關詳細信息,請參閱通過視圖修改數據。
---分區視圖
    分區視圖是通過對成員表使用 UNION ALL 所定義的視圖,
    這些成員表的結構相同,但作爲多個表分別存儲在同一個 SQL Server 實例中,
    或存儲在稱爲聯合數據庫服務器的自主 SQL Server 服務器實例組中。

--2.SELECT....INTO

SELECT…INTO 在默認文件組中創建一個新表,並將來自查詢的結果行插入該表中。 要查看完整的 SELECT 語法
https://docs.microsoft.com/zh-cn/sql/t-sql/queries/select-into-clause-transact-sql?view=sql-server-2017

語法
    [ INTO new_table ]
    [ ON filegroup ]
參數
    new_table 
        根據選擇列表中的列和從數據源選擇的行,指定要創建的新表名。
        new_table 的格式通過對選擇列表中的表達式進行取值來確定 。 new_table 中的列按選擇列表指定的順序創建 。 
        new_table 中的每列與選擇列表中的相應表達式具有相同的名稱、數據類型、爲 Null 性和值 。 列的 IDENTITY 
        屬性將被轉移,但在“備註”部分的“使用標識列”中定義的情況除外。
要在 SQL Server 的同一實例上的另一個數據庫中創建表,請將 new_table 指定爲 database.schema.table_name 
形式的完全限定名稱 。

---3.INSERT...INTO

-- Syntax for SQL Server and Azure SQL Database  

[ WITH <common_table_expression> [ ,...n ] ]  
INSERT   
{  
        [ TOP ( expression ) [ PERCENT ] ]   
        [ INTO ]   
        { <object> | rowset_function_limited   
          [ WITH ( <Table_Hint_Limited> [ ...n ] ) ]  
        }  
    {  
        [ ( column_list ) ]   
        [ <OUTPUT Clause> ]  
        { VALUES ( { DEFAULT | NULL | expression } [ ,...n ] ) [ ,...n     ]   
        | derived_table   
        | execute_statement  
        | <dml_table_source>  
        | DEFAULT VALUES   
        }  
    }  
}  
[;]  
  
<object> ::=  
{   
    [ server_name . database_name . schema_name .   
      | database_name .[ schema_name ] .   
      | schema_name .   
    ]  
  table_or_view_name  
}  
  
<dml_table_source> ::=  
    SELECT <select_list>  
    FROM ( <dml_statement_with_output_clause> )   
      [AS] table_alias [ ( column_alias [ ,...n ] ) ]  
    [ WHERE <search_condition> ]  
        [ OPTION ( <query_hint> [ ,...n ] ) ]


---4.update 語句
UPDATE A SET A1 = B1, A2 = B2, A3 = B3 FROM A, B WHERE A.ID = B.ID

-- INSERT INTO SELECT與SELECT INTO FROM語句
INSERT INTO SELECT語句

語句形式爲:Insert into Table2(field1,field2,...) select value1,value2,... from Table1

或者:Insert into Table2 select  *  from Table1

注意:(1)要求目標表Table2必須存在,並且字段field,field2...也必須存在

(2)注意Table2的主鍵約束,如果Table2有主鍵而且不爲空,則 field1, field2...中必須包括主鍵

(3)注意語法,不要加values,和插入一條數據的sql混了,不要寫成:

 

2.SELECT INTO FROM語句

語句形式爲:SELECT vale1, value2 into Table2 from Table1

要求目標表Table2不存在,因爲在插入時會自動創建表Table2,並將Table1中指定字段數據複製到Table2中。
#將Table1中指定字段數據複製到Table2中
select * into table2 from table1


---SQLServer中查詢SQL數據庫中的schema
select sys.objects.name,sys.schemas.name from sys.objects,sys.schemas where sys.objects.type='U'

AND sys.objects.schema_id=sys.schemas.schema_id;


----sql server數據庫中 INFORMATION_SCHEMA的用法
1.查詢數據庫的所有表:
select * from INFORMATION_SCHEMA.TABLES
2.查詢表名爲xxx的所有列的信息

select * from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='Area'


if語句

 if not exists (select 1 from t where id = 1)
      insert into t(id, update_time) values(1, getdate())
   else
      update t set update_time = getdate() where id = 1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章