1.---视图
https://docs.microsoft/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/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
更多推荐
SQLServer语句汇总
发布评论