因為公司需要,要把sql一張表中的全部資料插入到另一張表中,而且兩張表的字段還不完全一樣。以前沒遇到過這樣的內容,現在把實現的方法記錄下來。
用insert命令插入多行資料有兩種方法,
insert命令用來在表中插入資料,語法如下:
insert [into] [(column_list)] values (value_list)
value_list是和在column_list中列相應的值。這些值可以是常量、tsql變數或sql server內部函式。值的順序應和column_list中列的順序相對應。如果沒有定義column_list,則值的順序應和表中列的順序對應。
insert的values_list也可通過select語句或乙個儲存過程來提供。語法如下:
insert [into] [(column_list)]
select from
insert [into] [(column_list)]
execute
我感覺第乙個方法比較簡單實用,準備把要插入的表得字段設定多點,這樣插入表時沒有的字段為空就可以了,也不影響原來的。詳細的有關sql插入的方法介紹如下:
在向表中新增資料時應該注意兩點:
第一是使用者許可權,只有sysadmin角包成員、資料庫和資料庫物件所有者及其授權使用者才有許可權向表中新增資料;
第二是資料格式,對於不同的資料型別,插入資料的格式也不一樣,應嚴格遵守它們各自的格式要求。
transact-sql語言中用insert語句向表或檢視中插入新的資料行。insert語句的語法格式為:
insert [into] table_source
[,…n])
|default values
|select_statement
|execute_statement}}
其中,column_list引數為新插入資料行中一列或多列列名列表,它說明insert 語句只為指定列插入資料。在給表或視中部分列插入資料時,必須使用列名列表方式指出這部分列名。其餘未指定列的列值要根據它們的預設值和空值屬性情況而定,它們有以下幾種可能取值:
(1)對於timestamp列或具有identity屬性列,它們的列值由sql server計算後自動賦值。
(2)如果這些列有預設值或關聯有預設資料庫物件,插入新列時,它們的值為預設值。
(3)當這些列沒有預設值設定時,但它們允許空值時,該列值為空。
(4)當這些列既沒有預設值設定,也不允許空值時,sql server在執行insert 語句時將產生錯誤,導致插入操作失敗。
當未指定column_list 引數時,為各列所提供的資料順序應嚴格按照表中各列的定義順序,而使用column_list引數則可以調整向表中所插入資料的列順序,只要values子句所提供的資料順序與column_list引數中指定的列順序相同即可。
values子句為新插入行中column_list 引數所指定列提供資料,這些資料可以以常量表示式形式提供,或使用default關鍵字說明向列中插入其預設值。
default values說明向表中所有列插入其預設值。對於具有indentity 屬性或timestamp 資料型別列,系統將自動插入下乙個適當值。對於沒有設定預設值的列,如果它們允許空值,sql server將插入null,否則返回一錯誤訊息。
select_statement是標準的資料庫查詢語句,它是sql server為insert語句所提供的又一種資料插入方式。insert語句將select_statement子句所返回的結果集合資料插入到指定表中。查詢語句結果集合每行中的資料數量、 資料型別和排列順序也必須與表中所定義列或 column_list 引數中指定列的數量、資料型別和排列順序完全相同。
sql server為insert語句提供的第四種資料插入方式是通過執行系統儲存過程,其資料來自於過程執行後所產生的結果集合。所執行的過程可以為儲存過程、系統儲存過程或擴充套件儲存過程,它們既可以為本地儲存過程,又可以是遠端伺服器上的儲存過程,只要使用者具有它們的執行許可權即可。有關儲存過程請參閱對應的內容。
table_source說明insert語句插入資料時所操作的表或檢視,其語法格式可簡單書寫為:
table_name和view_name說明被插入資料的表或檢視名稱,table_alias引數為表或檢視設定別名。
使用別名有兩方面原因:
當表或檢視名稱較長時,使用別名可以簡化書寫工作;
第二,在自連線或子查詢中,使用別名可以區別同乙個表或檢視。
在向表中插入資料時, 如果所插入的資料與約束或規則的要求衝突, 或是它們的資料型別不相容時,將導致insert 語句執行失敗。當使用select或execute子句向表中一次插入多行資料時,如果其中有任一行資料有誤,它將導致整個插入操作失敗,使sql server停止所有資料行的插入操作。
例一、使用數值列表方式( 假定 usertable 表中只定義了name、age和***字段,且name、***均為char型別,age為int型別)。
insert usertable
values ('張三','女',18)
例二、使用列名列表方式
insert usertable (age,name)
values (18,'張三')
例三、在數值列表中,還可以將變數的值插入到表中。在使用變數為列提供資料時,應保證變數的資料型別與列資料型別相同,或是可以自動將它們轉換為相同的資料型別。例如:
declare @name char(16)
set @name='張三'
insert usertable
values (@name,default,20)
本例中asp中是這樣的:
dim name
name="張三"
sqlstr="insert usertable values ('"&name&"','女',20)"……例
四、將select子句的所返回的結果集合插入到表中。例如:
insert usertable (name,***,age)
select 's'+name,***,age
from usertable where name like '張%%'
群裡發的訊息:
錯誤sql語句:
insert into re(path) values(select tb.lineid from tb)
改正:insert into re(path) (select tb.lineid from tb)
解析:插入資料,後面跟乙個檢視,就不需要values,就算插入欄位多也不需要.
select case re.flag when '北京' then '無' else '有' end as flag from re
動態sql插入表
建表 object table dbo tbl billinfo 0805 script date 2008 5 26 15 41 17 if exists select from dbo.sysobjects where id object id n dbo tbl billinfo 0805 a...
SQL建表及插入
一 建表 一 creat語句的基本用法 create table schema table column datatype default expr column constraint table constraint 例子 creat table student id number primary...
sql語句迴圈插入表
sql drop procedure if exists proc initdata delimiter 訴mysql直譯器,該段命令是否已經結束了,mysql是否可以執行了。預設情況下,delimiter是分號。在這裡是規定mysql結束符號是 create procedure proc init...