也许这是一个非常简单的问题,本没有必要在此赘述,但是就是这样一个小例子却令我产生很多困惑。
很久以前网上就有消息说,T-SQL行构造器(Row Constructors)用来在INSERT语句中一次性插入多行数据。
例如:
http://www.5120w.com/html/data/SQLServer/content8136.html
http://www.onegreen.net/Article/Database/SQLServer/SQLServer8/15115.html
等等很多地址
或是希赛的书籍《SQL Server 2008 数据库系统开发》中第27页
都有类似这样的示例:
CREATE TABLE testTable
(
Column1 nvarchar(10),
Column2 nvarchar(10)
)
GO
INSERT INTO testTable VALUES(
('1','1'),
('2','2')
)
Drop table testTable
然后这样的示例在我电脑上的SQL Server 2008中根本不能正常运行。
Incorrect syntax near ','.
如果想要正常运行的话
示例应该是这样的:
create table tableName
(
onecol varchar(20),
twocol varchar(20)
)
go
insert into
tableName(onecol,twocol) values
('1','aaaa'),
('2','bbbb')
select * from tableName
drop table tableName
/*
onecol twocol
-------------------- --------------------
1 aaaa
2 bbbb
*/
为什么一个如此简单的插入,在网上竟然有两个版本呢?
这两种写法在我的电脑上只有一种能运行又是为什么呢?
首先我们在看一下下面这个网站的介绍:
http://www.5120w.com/html/data/SQLServer/content8136.html
文中曾说:
经过增强后的 INSERT 语句的语法结构如下。
以下为引用的内容:
[WITH<common_table_expression>[,...n]]
INSERT
[TOP(expression)[PERCENT]]
[INTO]
{<object>|rowset_function_limited
[WITH(<Table_Hint_Limited>[...n])]
}
{
[(column_list)]
[<OUTPUTClause>]
{VALUES(({DEFAULT|NULL|expression}[,...n])[,...n])
|derived_table
|execute_statement
|<dml_table_source>
|DEFAULTVALUES
}
}
[;]
<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])]
然后我们在到微软的官网上去看看:
http://msdn.microsoft.com/zh-cn/library/ms174335.aspx
[ 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 ] ) ]
我们可以看到红色颜色这行是不一样的。
这是为什么呢?
难道有人在网上自己造的T-SQL语法?还是这是两个不同的版本?不明白!
我的版本号是:
Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
大家可以自己试试,随便把版本号发一下。
如果另外那种是错误的,建议大家不要到处转载一些不正确的言论或是文章。
@【叶子】http://blog.csdn.net/maco_wang 原创作品,转贴请注明作者和出处,留此信息。
分享到:
相关推荐
SQL server 2008
SQL SERVER 2008 学习笔记:日常维护、深入管理、性能优化。
SQL Server 2008 学习笔记
sqlserver个人学习笔记
智能的 提供了一个全面的平台 可以在你的用户需要的时候给他发送观察和信息 ">SQL Server 2008 出现在微软数据平台愿景上是因为它使得公司可以运行他们最关键任务的 应用程序 同时降低了管理数据基础设施和发送观察...
昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行,比如表中有两列数据 : 类别 名称 AAA 企业1 AAA 企业2 AAA 企业3 ...
SQL.SERVER.2008学习笔记:日常维护、深入管理、性能优化]
sql server 2008笔记整理
SqlServer将多行记录按分组信息一行显示
数据库是按照数据结构来组织、存储...此学习课程将以SQL Server2008为平台,为您系统的介绍数据库的基本理论及应用。其中涉及数据库的创建及管理;T-SQL数据语言操作;视图、索引、存储过程;数据库的备份恢复等知识。
多行数据一行显示多行数据一行显示多行数据一行显示多行数据一行显示
SQL Server中多行数据更新的触发器应用研究.pdf
第4章 SQL Server 2008数据表管理 SQL 2008完全学习手册 视频教程 第5章 操作架构、索引和视图 SQL 2008完全学习手册 视频教程 第6章 数据查询和管理 第7章 操作查询 第8章 Transact-SQL编程 第9章 存储过程 第10章 ...
可根据关键字符将一列分成多行显示,例如 A B 1 1.1.2 拆分成 1 1 1 1 1 2 进行相关的显示
Sqlserver大数据量插入速度慢或丢失数据的解决方法 Sqlserver大数据量插入速度慢或丢失数据的解决方法
Sqlserver2008--学习笔记(自己总结)
Oracle SQLServer数据库 留在备用 培训资料
第一步:下载安装SQL server2019 下载地址:https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 【方式一】要求严苛 在这里插入图片描述 【方式二】自学上进 在这里插入图片描述
Microsoft.SQL.Server.2008.学习笔记:日常维护、深入管理、性能优化.part2.rar; 中文版; 第二部分(共两部分)
SQL server2019 学习笔记之SQL Server 2019 配置管理 第一步:打开SQL Server2019配置管理器 在这里插入图片描述 在这里插入图片描述