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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值