SQL Server 2008 学习笔记【一】 一次性插入多行数据的问题
来源:互联网 发布:邓紫棋 知乎 编辑:程序博客网 时间:2024/06/06 19:04
也许这是一个非常简单的问题,本没有必要在此赘述,但是就是这样一个小例子却令我产生很多困惑。
很久以前网上就有消息说,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中一次性插入多行数据的方法汇总
- SQL Server 2008 插入多行数据
- sql server 的T-SQL 学习笔记(二)--- 解决union select插入多行数据过滤数据(union all)
- SQL多行数据插入
- SQL Server 函数学习笔记⑥函数的高级应用=》按规则拆分列形成行数据
- SQL Server 2008 学习笔记(一)
- sql server 2008学习笔记(一)
- SQL SERVER学习笔记一
- SQL server 学习笔记一
- sql server学习笔记一
- SQL Server学习笔记(一)
- 一次性插入上万条数据的sql
- sql server数据库insert多行数据
- SQL一次性插入多条数据
- SQL一次性插入多条数据
- SQL一次性插入多条数据
- sql server 的T-SQL 学习笔记(一)
- Java各种数据库连接驱动,url大全
- YUV/RGB格式及快速转换
- 信用卡
- 【Stones from other hills】MPEG-2传输流分析与视音频同步问题的研究
- Offscan 新版本发布 (V1.1)
- SQL Server 2008 学习笔记【一】 一次性插入多行数据的问题
- 测试策略制定(20090915)
- RPC 远程过程调用协议
- 20090916
- marquee在firefox下,时滚时不滚的解决方法
- PerFieldAnalyzerWrapper 使用
- marquee 详解!
- 链栈和链队的基本操作
- java中的synchronized关键字 用法