将表中数据生成SQL语句
将表中数据生成SQL语句
在开发过程中,经常需要我们对表中的数据进行转移,如果在同台机器,可以使用SQL 自带的导入数据,但是如果想让所有的数据生成可执行的SQL语句,它的移植性最强了。
首先要设计一个存储过程。
具体如下:
CREATE PROCEDURE pOutputData
@tablename sysname
AS
declare@column varchar(1000)
declare@columndata varchar(1000)
declare@sql varchar(4000)
declare@xtype tinyint
declare@name sysname
declare@objectId int
declare@objectname sysname
declare@ident int
set nocount on
set@objectId=object_id(@tablename)
if@objectId is null-- 判斷對象是否存在
begin
print'The object not exists'
return
end
set@objectname=rtrim(object_name(@objectId))
if@objectname is null or charindex(@objectname,@tablename)=0--此判断不严密
begin
print'object not in current database'
return
end
if OBJECTPROPERTY(@objectId,'IsTable') <>1-- 判斷對象是否是table
begin
print'The object is not table'
return
end
select@ident=status&0x80from syscolumns where id=@objectid and stat us&0x80=0x80
if@ident is not null
print'SET IDENTITY_INSERT '+@TableName+' ON'
declare syscolumns_cursor cursor
for select ,c.xtype from syscolumns c where c.id=@objectid order b y c.colid
open syscolumns_cursor
set@column=''
set@columndata=''
fetch next from syscolumns_cursor into@name,@xtype
while@@fetch_status<>-1
begin
if@@fetch_status<>-2
begin
if@xtype not in(189,34,35,99,98) --timestamp不需处理,image,text,ntext, sql_variant 暂时不处理
begin
set@column=@column+case when len(@column)=0then''else','end+@n ame
set@columndata=@columndata+case when len(@columndata)=0then''el se','','','
end
+case when@xtype in(167,175) then'''''''''+'+@name+'+'''''''''--varchar,c har
when@xtype in(231,239) then'''N''''''+'+@name+'+'''''''''--nvarchar,ncha r
when@xtype=61then'''''''''+convert(char(23),'+@name+',121)+'''''''''--d atetime
when@xtype=58then'''''''''+convert(char(16),'+@name+',120)+'''''''''--s
malldatetime
when@xtype=36then'''''''''+convert(char(36),'+@name+')+'''''''''--unique identifier
else@name end
end
end
fetch next from syscolumns_cursor into@name,@xtype
end
close syscolumns_cursor
deallocate syscolumns_cursor
set@sql='set nocount on select ''insert '+@tablename+'('+@column+') val ues(''as ''--'','+@columndata+','')'' from '+@tablename
print'--'+@sql
exec(@sql)
if@ident is not null
print'SET IDENTITY_INSERT '+@TableName+' OFF'
GO
exec UspOutputData tableName[表名] -- 运行存储过程!并加上你要复制的表
查询结果如下:
insert T_user_title(F_ID,F_TitleName,F_Remark,F_Status,F_EditTime,F_Instituti onId) values( 101 , '软件工程师' , '从事软件研发',1, '2007-12-26 10:2 6:43.000',101)
insert T_user_title(F_ID,F_TitleName,F_Remark,F_Status,F_EditTime,F_Instituti onId) values( 201 , '销售人员' , '从事软件销售' ,1 , '2007-12-26 10:26:29.000',
101 )
insert T_user_title(F_ID,F_TitleName,F_Remark,F_Status,F_EditTime,F_Instituti onId) values( 301 , 'sfgsdfg' , 'asdfasdf', 3 , '2007-12-25 18:21:48.000',10 1 )
提示:
这样执行之后,可能你得到的是基于表格内的数据。
为了进一步生成可用的SQL语句,只
要对SQL简单的进行设置就可以了。
在数据表中添加一个字段的SQL语句怎么写-百度
在数据表中添加⼀个字段的SQL语句怎么写-百度数据表中添加⼀个字段的标准SQL语句写法为:alter table 表名 add (字段字段类型) [ default '输⼊默认值'] [null/not null] ;举例:ALTER TABLE employee ADD spbh varchar(20) NOT NULL Default 0意思就是在表employee 中加⼊字段spbh,该字段的类型是varchar,⼤⼩20,并且不允许为空,初始默认值是0。
扩展资料:其他常⽤sql语句:1、修改数据表中某项字段属性,为其添加备注。
语句格式:comment on column 库名.表名.字段名 is '输⼊的备注';⽰例:我要在ers_data库中 test表 document_type字段添加备注,则sql语句为:comment on column ers_data.test.document_type is '⽂件类型';2、修改数据表中某字段类型。
语句格式:alter table 表名 modiy (字段字段类型 [default '输⼊默认值' ] [null/not null] ,字段字段类型 [default '输⼊默认值' ] [null/not null] ); 修改多个字段⽤逗号隔开。
⽰例:想要修改⼀个teacher教师表中字段办公室classroom的类型为char(20),且默认值“办公室”,则对应sql为:ALTER TABLE teacher ALTER COLUMN classroom VARCHAR(20) NOT NULL default "办公室";3、删除数据表中的某字段。
语句格式:alter table 表名 drop (字段);⽰例:删除表student中的字段age,可以⽤如下sql:alter table student drop age;数据表中添加⼀个字段的SQL语句写法为:1、alter table 表名 ADD 字段类型 NOT NULL Default 02、ALTER TABLE employee ADD spbh varchar(20) NOT NULL Default 03、在表employee 中加⼊ spbh 类型是varchar⼤⼩20 不为空默认值是0扩展资料通⽤式: alter table [表名] add [字段名] 字段属性 default 缺省值 default 是可选参数增加字段: alter table [表名] add 字段名 smallint default 0 增加数字字段,整型,缺省值为0alter table [表名] add 字段名 int default 0 增加数字字段,长整型,缺省值为0alter table [表名] add 字段名 single default 0 增加数字字段,单精度型,缺省值为0alter table [表名] add 字段名 double default 0 增加数字字段,双精度型,缺省值为0alter table [表名] add 字段名 Tinyint default 0 增加数字字段,字节型,缺省值为0alter table [表名] add 字段名 text [null] 增加备注型字段,[null]可选参数alter table [表名] add 字段名 memo [null] 增加备注型字段,[null]可选参数alter table [表名] add 字段名 varchar(N) [null] 增加变长⽂本型字段⼤⼩为N(1~255)alter table [表名] add 字段名 char [null] 增加定长⽂本型字段⼤⼩固定为255alter table [表名] add 字段名 Datetime default 函数增加⽇期型字段,其中函数可以是now(),date()等,表⽰缺省值删除字段: alter table [表名] drop 字段名修改变长⽂本型字段的⼤⼩:alter table [表名] alter 字段名 varchar(N)删除表: drop table [表名]。
如何根据当前MDB中的表生成对应的JETSQLDDL“CREATETABLE”语句脚本
如何根据当前MDB中的表生成对应的JETSQLDDL“CREATETABLE”语句脚本展开全文Access并未内置将表结构导出为脚本下次能直接建表的功能。
利用 ADOX / ADO / DAO 三个数据访问模型来获取对应的信息并组织 JET SQL DDL 语句,生成对应的 *.jetsql 文本文件脚本。
再根据上述脚本在一个新的 MDB 数据库中新建上述表。
注意:由于 JET SQL DDL 语句并不支持所有的 ADOX / ADO / DAO 属性,所以有一部分表的属性,比如“格式”属性无法通过JET SQL DDL 语句建立。
最完整的解决方案是生成*.VBA 脚本,而不是JET SQL 脚本。
Function CreateSQLString(ByVal FilePath As String) As Boolean--本函数根据当前MDB中的表创建一个 *.jetsql 脚本--这个函数不是最完美的解决方案,因为 JET SQL DDL 语句不支持一些 ACCESS 特有的属性(DAO支持)--This function create a "*.jetsql" script based on current mdb tables.--This function is not the BEST, because the JET SQL DDL never support some DAO property.Dim MyTableName As StringDim MyFieldName As StringDim MyDB As New ADOX.CatalogDim MyTable As ADOX.TableDim MyField As ADOX.ColumnDim proDim iC As LongDim strField() As StringDim strKey As StringDim strSQL As StringDim strSQLScript As StringDim objFile, stmFileDim strText As StringOn Error GoTo CreateSQLScript_ErrMyDB.ActiveConnection = CurrentProject.ConnectionFor Each MyTable In MyDB.TablesIf MyTable.Type = "TABLE" Then--指定表的类型,例如“TABLE”、“SYSTEM TABLE”或“GLOBAL TEMPORARY”或者“ACCESS TABLE”。
sql语句insert_into用法_概述及举例说明
sql语句insert into用法概述及举例说明1. 引言1.1 概述SQL是一种用于管理和查询关系型数据库的编程语言。
在SQL中,INSERT INTO 语句用于向表中插入新的行数据。
它是SQL语句中最常用的之一,因为它可以帮助我们往表中添加数据。
1.2 文章结构本文将介绍INSERT INTO语句的基本语法和用法,并通过举例说明来更好地理解。
首先,我们将详细讨论如何插入单行数据、插入多行数据以及使用默认值插入数据的方法。
然后,我们将通过三个具体示例对这些概念进行实际操作。
1.3 目的本文旨在帮助读者全面了解和掌握SQL语句INSERT INTO的使用方法。
通过深入探讨其基本概念和示例操作,读者能够清楚地理解如何向数据库表中插入新纪录,并能够根据实际需求合理运用相关技巧。
以上是文章“1. 引言”部分内容,请注意以普通文本格式回答,不要包含任何网址或markdown格式内容。
2. SQL语句INSERT INTO用法2.1 插入单行数据在SQL中,使用INSERT INTO语句可以向表中插入一条数据。
INSERT INTO 语句的基本语法如下:```INSERT INTO 表名(列1, 列2, 列3, ...)VALUES (值1, 值2, 值3, ...);```其中,表名代表要插入数据的目标表格名称;括号内的列1、列2、列3等代表要插入数据的目标列名称;VALUES关键字后面括号内的值1、值2、值3等为具体要插入的数值。
例如,我们有一个名为"students"的表格,它包含"id"、"name"和"age"三个列。
现在我们想向该表格中插入一条记录,id为101,姓名为张三,年龄为20。
可以使用如下SQL语句进行插入操作:```INSERT INTO students (id, name, age)VALUES (101, '张三', 20);```2.2 插入多行数据除了插入单行数据外,还可以使用INSERT INTO语句一次性插入多行数据。
sequelize之通过options生成sql语句
sequelize之通过options⽣成sql语句前⾔在node.js web框架中使⽤sequelize来作为ORM是⼗分⽅便的。
但是,有的时候我们需要⽤到⼦查询语句,使⽤sequelize⽆法完成需求。
这时候,如果你的查询语句不是很复杂,可以使⽤sequelize提供的query()⽅法直接执⾏⽣成的sql语句。
如果你的查询语句很复杂,但是⼦表查询结果数据不是很多,你可以先把⼦表查询结果获取到,在后端代码中进⾏数据处理,完成其它操作。
如果你的查询语句很复杂,并且⼦表查询结果数据⾮常多,不可能在代码中完成数据处理,简单的可以执⾏两次,第⼀次查询字表数据,获取到查询的sql语句,拼接好⼦查询语句后再查询⼀次即可。
由于sequelize只有执⾏查询后才可以在logging的回调函数中获取到⽣成的sql语句,这样就会多执⾏⼀次⽆⽤的数据库查询,下边写⼀个不执⾏查询获取sql语句的⽅法。
实例以nodejs为例根据options获取sql语句const Utils = require('sequelize/lib/utils');/*** @parms model 当前表的模型实例* @options {object} 查询参数*/module.exports = function genSqlString(model, options) {return (function (options) {const tableNames = {};tableNames[this.getTableName(options)] = true;options = Utils.cloneDeep(options);options = Object.assign({}, options, {hooks: true,rejectOnEmpty: true,type: 'SELECT',model: this,tableNames: Object.keys(tableNames)});options.originalAttributes = this._injectDependentVirtualAttributes(options.attributes);if (options.include) {options.hasJoin = true;this._validateIncludedElements(options, tableNames);if (options.attributes&& !options.raw&& this.primaryKeyAttribute&& !options.attributes.includes(this.primaryKeyAttribute)&& (!options.group || !options.hasSingleAssociation || options.hasMultiAssociation)) {options.attributes = [this.primaryKeyAttribute].concat(options.attributes);}}if (!options.attributes) {options.attributes = Object.keys(this.rawAttributes);options.originalAttributes = this._injectDependentVirtualAttributes(options.attributes);}this.options.whereCollection = options.where || null;Utils.mapFinderOptions(options, this);options = this._paranoidClause(this, options);return this.QueryGenerator.selectQuery(this.getTableName(options), options, this);}).call(model, options);};补充⼀个执⾏后获取sql语句的实例let sql = '';options.logging = function (str) {sql = str.substring(20, str.length-1); // 截取其中的sql语句};await models.OrderBasic.findAll(options); // options为查询时存⼊的参数总结1. 获取sql语句的⽅法实际上是将源码中⽣成sql语句的部分提取出来了2. ⽬前还没有遇到sql解析错误,等遇到了再来更新。
excel转oracle的insert语句
excel转oracle的insert语句如何将Excel数据转换为Oracle的Insert语句在数据库开发中,我们经常需要将Excel中的数据导入到Oracle数据库中。
为了实现这一目标,我们可以使用Excel VBA或Python等编程语言来处理数据,生成相应的Insert语句。
下面将以此为主题,一步一步回答如何将Excel数据转换为Oracle的Insert语句。
1. 准备工作:在开始之前,我们需要确保以下几个准备工作已经完成:- 安装Oracle数据库:确保你的计算机上已经安装了Oracle数据库,并且可以正常连接。
- 创建目标表:在Oracle数据库中创建一个与Excel数据对应的表,确保表结构与Excel数据中的列一致。
2. 导入Excel数据在这一步,我们将使用Excel VBA或Python等编程语言将Excel数据导入到一个新建的工作表中。
- Excel VBA:打开Excel文件,按下Alt+F11快捷键打开VBA编辑器,右键点击项目中的"Microsoft Excel 对象",选择插入-模块,然后在编辑器中编写相应的代码。
以下是一个简单的示例:vbaSub 导入数据()Dim ws As WorksheetDim rng As RangeDim conn As ObjectDim rs As ObjectDim sql As StringDim i As LongSet ws = ThisWorkbook.Sheets("Sheet1") '替换为你的工作表名Set rng = ws.Range("A2:D" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row) '替换为你的数据范围'建立数据库连接Set conn = CreateObject("ADODB.Connection")conn.ConnectionString = "Provider=OraOLEDB.Oracle;Data Source=your_db;UserID=your_username;Password=your_password;" '替换为你的数据库连接信息conn.Open'循环生成Insert语句For i = 1 To rng.Rows.Countsql = "INSERT INTO your_table (column1, column2, column3, column4) VALUES ("sql = sql & "'" & rng.Cells(i, 1).Value & "'," '替换为你的列名和对应的数据类型sql = sql & "'" & rng.Cells(i, 2).Value & "',"sql = sql & "'" & rng.Cells(i, 3).Value & "',"sql = sql & "'" & rng.Cells(i, 4).Value & "')"conn.Execute sqlNext i'关闭连接conn.CloseSet rs = NothingSet conn = NothingMsgBox "数据导入完成!"End Sub- Python:使用Python需要安装pyodbc库,并且需要先设置好数据源。
创建数据表的sql语句
创建数据表的sql语句在关系型数据库中,数据表是存储数据的一种结构化方式。
表由多个行和列组成,其中每行表示一个数据记录,每列则表示数据记录中的一个属性。
创建数据表通常需要使用 SQL (Structured Query Language) 语句,下面是一个数据表的 SQL 创建语句模板:```CREATE TABLE table_name (column1 data_type constraints,column2 data_type constraints,...columnN data_type constraints);```其中,`table_name` 是你要创建的数据表的名称;`column1`、`column2` 到 `columnN` 是数据表中的列名;`data_type` 是数据列的数据类型,如整数 `INT`、字符串 `VARCHAR` 等;`constraints` 是对数据列的一些约束条件,可以是限制数据列的取值范围、要求数据列不为空等。
下面我们通过一个例子来创建一个示例数据表,其中包含学生姓名、年龄和成绩等字段。
```CREATE TABLE students (id INT PRIMARY KEY,name VARCHAR(50) NOT NULL,age INT CHECK (age >= 0),score FLOAT DEFAULT 0);```在这个例子中,我们创建了一个名为 `students` 的数据表,其中包含`id`、`name`、`age` 和 `score` 四个列。
其中,`id` 列为主键,不能重复;`name` 列为字符串类型,不能为空;`age` 列为整数类型,且必须大于等于0;`score` 列为浮点数类型,默认值为 0。
以上是一个SQL 创建数据表的模板,你可以根据自己的需求修改表名、列名、数据类型和约束条件等。
在实际工作中,创建数据表是数据库应用的重要一环。
sql insert into select 语句 -回复
sql insert into select 语句-回复SQL 插入(INSERT)语句是用于向表格中插入新记录的。
然而,在一些特定的场景中,我们需要从另一个表格中查询数据并将结果插入到表格中。
这时就需要使用INSERT INTO SELECT 语句。
本文将从以下几个方面进行讲解:1. INSERT INTO SELECT 语法和用法;2. INSERT INTO SELECT 实例;3. INSERT INTO SELECT 的优缺点;4. INSERT INTO SELECT 的应用场景。
一、INSERT INTO SELECT 语法和用法INSERT INTO SELECT 语法可以如下表示:INSERT INTO table_name (column1, column2, column3, ...) SELECT column1, column2, column3, ...FROM table_nameWHERE condition;其中,INSERT INTO table_name (column1, column2, column3, ...) 用于指定要插入数据的表格和列名;而SELECT column1, column2, column3, ... FROM table_name WHERE condition 则是用于指定从哪个表格中查询数据,并且使用condition 进行过滤。
在这个语法中,我们可以使用以下几个关键词:1. INSERT INTO:用于指定要插入数据的表格和列名。
2. SELECT:用于指定从哪个表格中查询数据,并且使用condition 进行过滤。
3. FROM:用于指定查询数据的来源表格。
4. WHERE:用于指定查询数据的条件。
需要注意的是,在使用INSERT INTO SELECT 语句时,我们必须确保要插入的数据列和查询出来的数据列一一对应。
如果列名和顺序不匹配,那么将会失败。
基于PB数据窗口生成SQL语句原理的使用技巧
l mw d 一 . s to ( i = w 1 ne R w0 I r )
_
d 一 .e e … …… 、 w 1St m( h
d 一 .e t t u 0- w0pil yN t w 1Ste a s ir ,,r 8 ! — l mS t o n r, Moie! df d) i 此方法 在利用 表格形式 数据 窗 口输入 数 据时, 可以预先增加许多新行, 界面美 观, 用户操 作简便 。
的 操 纵 。
1数据窗 口自动生 成语句原理 有两大 问题在数据 窗 口生成 S L语句之 Q 前 必须被解决 :一是生成什 么样的 S L语句 ; Q 二是 何时 根据什 么条 件生 成不 同种类 的 S L Q 语句。 1l数据窗 E生成何样 S L语句 _ l Q 系统必须首先要知道被更新 的表,更新表 中哪些字段, 什么字段是主键 , 主键被修 改时采 取的方式 ,数据库 中数据与数据窗 口的数据不 致时如何处理 。这些信息可 以在设计状态 时
Ke o d:aa n o ;S t e n; Pw rule y w r s t dw QL s tmet o eb i r d wi a d 引 言
P w rule 因其所具有 的为应用开发人 o eB i r d 员提供方便环境和强大工具的特 点成 为广为应 用的数据库开发工具之 一。由于其 特色的数 据 窗 口技术对底层 S QL语句进行 了封装,一些特 殊 应用不容易由数据 窗口来实现 。充分掌握这 些 生成原理,就能对数据库数据 实现更加灵活
一
设置。
111Alw U d t : .. l p ae 决定数据 窗口是否允 o s 许 修改数 据库 。 11 al t U dt:决定 被更新 的表 。 .. T be o p ae 2 该 属性决 定生成 的 S QL语句中的表名。 11 p a a l C lmn:决定可 能被更 .3 U dt be o e u s 新 的各列 。列表框 中各项为数据窗 口对象所对 应 的 各 数 据列 。 11 nq e K y C lmns决 定 被更 新 .. U iu e o 4 u () :
sqlserver数据库导出表里所有数据成insert语句
sqlserver数据库导出表⾥所有数据成insert语句有时候,我们想把数据库的某张表⾥的所有数据导⼊到另外⼀个数据库或另外⼀台计算机上的数据库,对于sql server有这样的⼀种⽅法下⾯我以sql server 2008 R2,数据库是Northwind数据库为例,⽬标:把Northwind数据库的Orders表导出成insert语句。
第⼀步:选择Northwind数据库,右键-任务-⽣成脚本:第⼆步:在弹出的“⽣成和发布脚本”的简介窗⼝,按“下⼀步”按钮:第三步:在“选择对象”窗⼝,选中“选择特定数据库对象”,展开表,勾选要⽣成insert语句的表,我这⾥选的是order表,按“下⼀步”按钮:第四步:在弹出的“设置脚本编写选项”窗⼝,按“⾼级”按钮,在弹出的“⾼级脚本编写选项”中下拉下拉条⾄底部,设置“要编写脚本的数据类型”为“仅限数据”(“仅限数据”是只导出数据为insert语句,如果是导出表结构的话选择“仅限架构”,选择“架构和数据”则架构和insert语句都⽣成),按“确定”按钮:第五步:在“设置脚本编写选项”窗⼝,“指定如何保存或发布脚本”的“输出类型”选中“将脚本保存到特定位置”,勾选“保存到⽂件”,则可以指定⼀个保存的路径,保存为.sql⽂件,勾选“保存到新建查询窗⼝”,则会新打开⼀个查询窗⼝,把所有insert 语句放到新查询窗⼝:第六步:在“设置脚本编写选项”窗⼝,按“下⼀步”按钮,弹出:第七步:在“摘要”窗⼝,按“下⼀步”按钮:第⼋步:在“保存或发布脚本”窗⼝,按“完成”按钮:最终会⾃动新建⼀个查询窗⼝,order表⾥的所有数据都转换成insert语句。
=====================================================================================将表⾥的数据批量⽣成INSERT语句的存储过程增强版有时候,我们需要将某个表⾥的数据全部或者根据查询条件导出来,迁移到另⼀个相同结构的库中⽬前SQL Server⾥⾯是没有相关的⼯具根据查询条件来⽣成INSERT语句的,只有借助第三⽅⼯具(third party tools)这种脚本⽹上也有很多,但是⽹上的脚本还是⽋缺⼀些规范和功能,例如:我只想导出特定查询条件的数据,⽹上的脚本都是导出全表数据如果表很⼤,对性能会有很⼤影响这⾥有⼀个存储过程(适⽤于SQLServer2005 或以上版本)-- =============================================-- Author: <桦仔>-- Blog: </lyhabc/>-- Create date: <2014/10/18>-- Description: <根据查询条件导出表数据的insert脚本>-- =============================================CREATE PROCEDURE[InsertGenerator](@tableName NVARCHAR(100),-- the table name@whereClause NVARCHAR(MAX),--col1=1@includeIdentity INT-- include identity column(1:yes,0:no))AS--of an INSERT DML statement.DECLARE@string NVARCHAR(MAX) --for storing the first half of INSERT statementDECLARE@stringData NVARCHAR(MAX) --for storing the data (VALUES) related statementDECLARE@dataType NVARCHAR(20) --data types returned for respective columnsDECLARE@schemaName NVARCHAR(20) --schema name returned from sys.schemasDECLARE@schemaNameCount int--shema countDECLARE@QueryString NVARCHAR(MAX) -- provide for the whole query,DECLARE@identity INT--identity column(1:yes,0:no)set@QueryString=''--如果有多个schema,选择其中⼀个schemaSELECT@schemaNameCount=COUNT(*)FROM sys.tables tINNER JOIN sys.schemas s ON t.schema_id = s.schema_idWHERE =@tableNameWHILE(@schemaNameCount>0)BEGIN--如果有多个schema,依次指定select@schemaName= namefrom(SELECT ROW_NUMBER() over(order by s.schema_id) RowID,FROM sys.tables tINNER JOIN sys.schemas s ON t.schema_id = s.schema_idWHERE =@tableName) as vwhere RowID=@schemaNameCount--Declare a cursor to retrieve column specific information--for the specified tableDECLARE cursCol CURSOR FAST_FORWARDFORSELECTclmns.[name]AS[column_name],usrt.[name]AS[data_type],CAST(COLUMNPROPERTY(clmns.id, clmns.[name], N'IsIdentity') AS int) AS[Identity]FROM dbo.sysobjects AS tbl WITH (NOLOCK)INNER JOIN dbo.syscolumns AS clmns WITH (NOLOCK) ON clmns.id=tbl.idLEFT JOIN dbo.systypes AS usrt WITH (NOLOCK) ON usrt.xusertype = clmns.xusertypeLEFT JOIN dbo.sysusers AS sclmns WITH (NOLOCK) ON sclmns.uid = usrt.uidLEFT JOIN dbo.systypes AS baset WITH (NOLOCK) ON baset.xusertype = clmns.xtype and baset.xusertype = baset.xtype LEFT JOIN dbo.syscomments AS defaults WITH (NOLOCK) ON defaults.id = clmns.cdefaultLEFT JOIN dbo.syscomments AS cdef WITH (NOLOCK) ON cdef.id = clmns.id AND cdef.number= clmns.colidWHERE (tbl.[type]='U') AND (tbl.[name]=@tableName AND SCHEMA_NAME(tbl.uid)=@schemaName) AND CAST(COLUMNPROPERTY(clmns.id, clmns.[name], N'IsIdentity') AS int)=@includeIdentity ORDER BY tbl.[name], clmns.colorderOPEN cursColSET@string='INSERT INTO ['+@schemaName+'].['+@tableName+']('SET@stringData=''DECLARE@colName NVARCHAR(500)FETCH NEXT FROM cursCol INTO@colName, @dataType,@identityPRINT@schemaNamePRINT@colNameIF@@fetch_status<>0BEGINPRINT'Table '+@tableName+' not found, processing skipped.'CLOSE curscolDEALLOCATE curscolRETURNENDWHILE@@FETCH_STATUS=0BEGINIF@dataType IN ( 'varchar', 'char', 'nchar', 'nvarchar' )BEGINSET@stringData=@stringData+'''''''''+isnull('+@colName+','''')+'''''',''+'ENDELSEIF@dataType IN ( 'text', 'ntext' ) --if the datatype--is text or something elseBEGINSET@stringData=@stringData+'''''''''+isnull(cast('+@colName+' as nvarchar(max)),'''')+'''''',''+'END--from varchar implicitlyBEGINSET@stringData=@stringData+'''convert(money,''''''+isnull(cast('+@colName+' as nvarchar(max)),''0.0000'')+''''''),''+'ENDELSEIF@dataType='datetime'BEGIN-- SET @stringData = @stringData-- + '''convert(datetime,''''''+--isnull(cast(' + @colName + ' as nvarchar(max)),''null'')+''''''),''+'SET@stringData=@stringData+'COALESCE(''''''''+CONVERT(varchar(max),'+@colName+',120)+'''''''',''NULL'')+'',''+'ENDELSEIF@dataType='image'BEGINSET@stringData=@stringData+'''''''''+isnull(cast(convert(varbinary,'+@colName+')as varchar(6)),''0'')+'''''',''+'ENDELSE--presuming the data type is int,bit,numeric,decimalBEGINSET@stringData=@stringData+'''''''''+isnull(cast('+@colName+' as nvarchar(max)),''0'')+'''''',''+'ENDSET@string=@string+'['+@colName+']'+','FETCH NEXT FROM cursCol INTO@colName, @dataType,@identityEND--After both of the clauses are built, the VALUES clause contains a trailing comma which needs to be replaced with a single quote. The prefixed clause will only face removal of the trailing comma. DECLARE@Query NVARCHAR(MAX) -- provide for the whole query,-- you may increase the sizePRINT@whereClauseIF ( @whereClause IS NOT NULLAND@whereClause<>'')BEGINPRINT'stringData:'+@stringDataSET@query='SELECT '''+SUBSTRING(@string, 0, LEN(@string))+') VALUES(''+ '+SUBSTRING(@stringData, 0,LEN(@stringData) -2)+'''+'')''FROM '+@schemaName+'.'+@tableName+' WHERE '+@whereClausePRINT@query-- EXEC sp_executesql @query --load and run the built query--Eventually, close and de-allocate the cursor created for columns information.ENDELSEBEGINSET@query='SELECT '''+SUBSTRING(@string, 0, LEN(@string))+') VALUES(''+ '+SUBSTRING(@stringData, 0,LEN(@stringData) -2)+'''+'')''FROM '+@schemaName+'.'+@tableNameENDCLOSE cursColDEALLOCATE cursColSET@schemaNameCount=@schemaNameCount-1IF(@schemaNameCount=0)BEGINSET@QueryString=@QueryString+@queryENDELSEBEGINSET@QueryString=@QueryString+@query+' UNION ALL 'END--SET @QueryString=REPLACE(@QueryString,'convert(datetime,''NULL'')',NULL)PRINT CONVERT(VARCHAR(MAX),@schemaNameCount)+'---'+@QueryStringEND--PRINT @QueryStringEXEC sp_executesql @QueryString--load and run the built query--Eventually, close and de-allocate the cursor created for columns information.这⾥要声明⼀下,如果你有多个schema,并且每个schema下⾯都有同⼀张表,那么脚本只会⽣成其中⼀个schema下⾯的表insert脚本⽐如我现在有三个schema,下⾯都有customer这个表CREATE SCHEMA testCREATE TABLE test.[customer](city int,region int)CREATE SCHEMA test1CREATE TABLE test1.[customer](city int,region int)在执⾏脚本的时候他只会⽣成dbo这个schema下⾯的表insert脚本INSERT INTO[dbo].[customer]([city],[region]) VALUES('1','2')这个脚本有⼀个缺陷⽆论你的表的字段是什麽数据类型,导出来的时候只能是字符表结构CREATE TABLE[dbo].[customer](city int,region int)导出来的insert脚本INSERT INTO[dbo].[customer]([city],[region]) VALUES('1','2')我这⾥演⽰⼀下怎麽⽤有两种⽅式1、导全表数据InsertGenerator 'customer', null或InsertGenerator 'customer', ''2、根据查询条件导数据InsertGenerator 'customer', 'city=3'或者InsertGenerator 'customer', 'city=3 and region=8'点击⼀下,选择全部然后复制新建⼀个查询窗⼝,然后粘贴其实SQLServer的技巧有很多最后,⼤家可以看⼀下代码,⾮常简单,如果要⽀持SQLServer2000,只要改⼀下代码就可以了补充:创建⼀张测试表CREATE TABLE testinsert (id INT,name VARCHAR(100),cash MONEY,dtime DATETIME) INSERT INTO[dbo].[testinsert]( [id], [name], [cash], [dtime] )VALUES ( 1, -- id - int'nihao', -- name - varchar(100)8.8, -- cash - moneyGETDATE() -- dtime - datetime)SELECT*FROM[dbo].[testinsert]测试InsertGenerator 'testinsert' ,''InsertGenerator 'testinsert' ,'name=''nihao'''InsertGenerator 'testinsert' ,'name=''nihao'' and cash=8.8'datetime类型会有⼀些问题⽣成的结果会⾃动帮你转换INSERT INTO[dbo].[testinsert]([id],[name],[cash],[dtime]) VALUES('1','nihao',convert(money,'8.80'),convert(datetime,'02 8 2015 5:17PM'))群⾥的⼈共享的另⼀个脚本IF OBJECT_ID('spGenInsertSQL','P') IS NOT NULLDROP PROC spGenInsertSQLGOCREATE proc spGenInsertSQL (@tablename varchar(256),@number BIGINT,@whereClause NVARCHAR(MAX))asbegindeclare@sql varchar(8000)declare@sqlValues varchar(8000)set@sql=' ('set@sqlValues='values (''+'select@sqlValues=@sqlValues+ cols +' + '','' + ' ,@sql=@sql+'['+ name +'],'from(select casewhen xtype in (48,52,56,59,60,62,104,106,108,122,127)then'case when '+ name +' is null then ''NULL'' else '+'cast('+ name +' as varchar)'+' end'when xtype in (58,61,40,41,42)then'case when '+ name +' is null then ''NULL'' else '+''''''''' + '+'cast('+ name +' as varchar)'+'+'''''''''+' end'when xtype in (167)then'case when '+ name +' is null then ''NULL'' else '+''''''''' + '+'replace('+ name+','''''''','''''''''''')'+'+'''''''''+' end'when xtype in (231)then'case when '+ name +' is null then ''NULL'' else '+'''N'''''' + '+'replace('+ name+','''''''','''''''''''')'+'+'''''''''+' end'when xtype in (175)then'case when '+ name +' is null then ''NULL'' else '+''''''''' + '+'cast(replace('+ name+','''''''','''''''''''') as Char('+cast(length as varchar) +'))+'''''''''+' end' when xtype in (239)then'case when '+ name +' is null then ''NULL'' else '+'''N'''''' + '+'cast(replace('+ name+','''''''','''''''''''') as Char('+cast(length as varchar) +'))+'''''''''+' end' else'''NULL'''end as Cols,namefrom syscolumnswhere id =object_id(@tablename)) TIF (@number!=0AND@number IS NOT NULL)BEGINset@sql='select top '+CAST(@number AS VARCHAR(6000))+'''INSERT INTO ['+@tablename+']'+left(@sql,len(@sql)-1)+') '+left(@sqlValues,len(@sqlValues)-4) +')'' from '+@tablename print@sqlENDELSEBEGINset@sql='select ''INSERT INTO ['+@tablename+']'+left(@sql,len(@sql)-1)+') '+left(@sqlValues,len(@sqlValues)-4) +')'' from '+@tablenameprint@sqlENDPRINT@whereClauseIF ( @whereClause IS NOT NULL AND@whereClause<>'')BEGINset@sql=@sql+' where '+@whereClauseprint@sqlENDexec (@sql)endGOView Code调⽤⽰例--⾮dbo默认架构需注意--⽀持数据类型:bigint,int, bit,char,datetime,date,time,decimal,money, nvarchar(50),tinyint, nvarchar(max),varchar(max),datetime2--调⽤⽰例如果top⾏或者where条件为空,只需要把参数填上nullspGenInsertSQL 'customer'--表名, 2--top ⾏数, 'city=3 and didian=''⼤连'''--where 条件--导出全表 where条件为空spGenInsertSQL 'customer'--表名, null--top ⾏数,null--where 条件INSERT INTO[Department] ([DepartmentID],[Name],[GroupName],[Company],[ModifiedDate]) values (1,N'售后部',N'销售组',N'中国你好有限公司XX分公司','05 5 2015 5:58PM') INSERT INTO[Department] ([DepartmentID],[Name],[GroupName],[Company],[ModifiedDate]) values (2,N'售后部',N'销售组',N'中国你好有限公司XX分公司','05 5 2015 5:58PM')。
SQL语句创建学生信息数据库表的示例-学生信息数据库表
用SQL语句创建如下三个基本表:学生表(Student)、课程表(Course)、学生选课表(SC),结构如下所示Student表结构Create table Student(Sno varchar(7) primary key,Sname varchar(10) not null,Ssex char (2) check(Ssex=‘男’or Ssex=’女’),Sage int check(Sage between 15 and 45),Sdept varchar(20) default(‘计算机系’))Course表结构Create table course(Cno varchar(10) primary key,Cname varchar(20) not null,Ccredit int check(Sctedit>0),Semester int check(Semester>0),Period int check(Period>0))SC表结构Create table SC(Sno varchar(7) foreign key references student(Sno),Cno varchar(10) foreign key references course(Cno),Grade int check(Grade between 0 and 100),Primary key (Sno,Cno))1.查询学生选课表中的全部数据。
SELECT *FROM SCgo2.查询计算机系学生的姓名、年龄。
Select Sname,SageFrom StudentWhere Sdept=’计算机系’3.查询成绩在70~80分之间的学生的学号、课程号和成绩。
Select Sno,Cno,GradeFrom Course,ScWhere o=o and sc.Grade between 70 and 804.查询计算机系年龄在18~20之间且性别为“男”的学生的姓名和年龄。
