博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
精妙的SQL和SQL SERVER 与ACCESS、EXCEL的数据导入导出转换
阅读量:6207 次
发布时间:2019-06-21

本文共 18316 字,大约阅读时间需要 61 分钟。

今天做个行列转换 找到的好语句 解决了我的问题
None.gif
* 说明:复制表(只复制结构,源表名:a 新表名:b)
None.gif
select
*
into b
from a
where
1
<>
1
None.gif
None.gif
* 说明:拷贝表(拷贝数据,源表名:a 目标表名:b)
None.gif
insert
into b(a, b, c)
select d,e,f
from b;
None.gif
None.gif
* 说明:显示文章、提交人和最后回复时间
None.gif
select a.title,a.username,b.adddate
from
table a,(
select
max(adddate) adddate
from
table
where
table.title
=a.title) b
None.gif
None.gif
* 说明:外连接查询(表名1:a 表名2:b)
None.gif
select a.a, a.b, a.c, b.c, b.d, b.f
from a
LEFT OUT
JOIN b
ON a.a
= b.c
None.gif
None.gif
* 说明:日程安排提前五分钟提醒
None.gif
select
*
from 日程安排
where
datediff(
'
minute
',f开始时间,
getdate())
>
5
None.gif
None.gif
* 说明:两张关联表,删除主表中已经在副表中没有的信息
None.gif
delete
from info
where
not
exists (
select
*
from infobz
where info.infid
=infobz.infid )
None.gif
None.gif
* 说明:
--
None.gif
None.gif SQL:
None.gif
None.gif
SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE
None.gif
None.gif
FROM TABLE1,
None.gif
None.gif (
SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE
None.gif
None.gif
FROM (
SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND
None.gif
None.gif
FROM TABLE2
None.gif
None.gif
WHERE TO_CHAR(UPD_DATE,
'
YYYY/MM
')
= TO_CHAR(SYSDATE,
'
YYYY/MM
')) X,
None.gif
None.gif (
SELECT NUM, UPD_DATE, STOCK_ONHAND
None.gif
None.gif
FROM TABLE2
None.gif
None.gif
WHERE TO_CHAR(UPD_DATE,
'
YYYY/MM
')
=
None.gif
None.gif TO_CHAR(TO_DATE(TO_CHAR(SYSDATE,
'
YYYY/MM
')
||
'
/01
',
'
YYYY/MM/DD
')
-
1,
'
YYYY/MM
') ) Y,
None.gif
None.gif
WHERE X.NUM
= Y.NUM (
+
None.gif
None.gif
AND X.INBOUND_QTY
+ NVL(Y.STOCK_ONHAND,
0)
<> X.STOCK_ONHAND ) B
None.gif
None.gif
WHERE A.NUM
= B.NUM
None.gif
None.gif
* 说明:
--
None.gif
select
*
from studentinfo
where
not
exists(
select
*
from student
where studentinfo.id
=student.id)
and 系名称
=
'
"&strdepartmentname&"
'
and 专业名称
=
'
"&strprofessionname&"
'
order
by 性别,生源地,高考总成绩
None.gif
None.gif
* 从数据库中去一年的各单位电话费统计(电话费定额贺电化肥清单两个表来源)
None.gif
None.gif
SELECT a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate,
'
yyyy
')
AS telyear,
None.gif
None.gif
SUM(decode(TO_CHAR(a.telfeedate,
'
mm
'),
'
01
', a.factration))
AS JAN,
None.gif
None.gif
SUM(decode(TO_CHAR(a.telfeedate,
'
mm
'),
'
02
', a.factration))
AS FRI,
None.gif
None.gif
SUM(decode(TO_CHAR(a.telfeedate,
'
mm
'),
'
03
', a.factration))
AS MAR,
None.gif
None.gif
SUM(decode(TO_CHAR(a.telfeedate,
'
mm
'),
'
04
', a.factration))
AS APR,
None.gif
None.gif
SUM(decode(TO_CHAR(a.telfeedate,
'
mm
'),
'
05
', a.factration))
AS MAY,
None.gif
None.gif
SUM(decode(TO_CHAR(a.telfeedate,
'
mm
'),
'
06
', a.factration))
AS JUE,
None.gif
None.gif
SUM(decode(TO_CHAR(a.telfeedate,
'
mm
'),
'
07
', a.factration))
AS JUL,
None.gif
None.gif
SUM(decode(TO_CHAR(a.telfeedate,
'
mm
'),
'
08
', a.factration))
AS AGU,
None.gif
None.gif
SUM(decode(TO_CHAR(a.telfeedate,
'
mm
'),
'
09
', a.factration))
AS SEP,
None.gif
None.gif
SUM(decode(TO_CHAR(a.telfeedate,
'
mm
'),
'
10
', a.factration))
AS OCT,
None.gif
None.gif
SUM(decode(TO_CHAR(a.telfeedate,
'
mm
'),
'
11
', a.factration))
AS NOV,
None.gif
None.gif
SUM(decode(TO_CHAR(a.telfeedate,
'
mm
'),
'
12
', a.factration))
AS
DEC
None.gif
None.gif
FROM (
SELECT a.userper, a.tel, a.standfee, b.telfeedate, b.factration
None.gif
None.gif
FROM TELFEESTAND a, TELFEE b
None.gif
None.gif
WHERE a.tel
= b.telfax) a
None.gif
None.gif
GROUP
BY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate,
'
yyyy
')
None.gif
None.gif
* 说明:四表联查问题
None.gif
select
*
from a
left
inner
join b
on a.a
=b.b
right
inner
join c
on a.a
=c.c
inner
join d
on a.a
=d.d
where
dot.gif..
None.gif
None.gif
* 说明:得到表中最小的未使用的ID号
None.gif
None.gif
*
SELECT (
CASE
WHEN
EXISTS(
SELECT
*
FROM Handle b
WHERE b.HandleID
=
1)
THEN
MIN(HandleID)
+
1
ELSE
1
END)
as HandleID
FROM Handle
WHERE
NOT HandleID
IN (
SELECT a.HandleID
-
1
FROM Handle a)
None.gif
None.gif
* 一个SQL语句的问题:行列转换
None.gif
select
*
from v_temp
None.gif 上面的视图结果如下:
None.gif
user_name role_name
None.gif
--
-----------------------
None.gif
系统管理员 管理员
None.gif feng 管理员
None.gif feng 一般用户
None.gif test 一般用户
None.gif 想把结果变成这样:
None.gif
user_name role_name
None.gif
--
-------------------------
None.gif
系统管理员 管理员
None.gif feng 管理员,一般用户
None.gif test 一般用户
None.gif
===================
None.gif
create
table a_test(name
varchar(
20),role2
varchar(
20))
None.gif
insert
into a_test
values(
'
',
'
管理员
')
None.gif
insert
into a_test
values(
'
',
'
管理员
')
None.gif
insert
into a_test
values(
'
',
'
一般用户
')
None.gif
insert
into a_test
values(
'
',
'
一般用户
')
None.gif
None.gif
create
function join_str(
@content
varchar(
100))
None.gif
returns
varchar(
2000)
None.gif
as
None.gif
begin
None.gif
declare
@str
varchar(
2000)
None.gif
set
@str
=
''
None.gif
select
@str
=
@str
+
'
,
'
+
rtrim(role2)
from a_test
where
[
name
]
=
@content
None.gif
select
@str
=
right(
@str,
len(
@str)
-
1)
None.gif
return
@str
None.gif
end
None.gif
go
None.gif
None.gif
--
调用:
None.gif
select
[
name
],dbo.join_str(
[
name
]) role2
from a_test
group
by
[
name
]
None.gif
None.gif
--
select distinct name,dbo.uf_test(name) from a_test
None.gif
None.gif
* 快速比较结构相同的两表
None.gif 结构相同的两表,一表有记录3万条左右,一表有记录2万条左右,我怎样快速查找两表的不同记录?
None.gif
============================
None.gif 给你一个测试方法,从northwind中的orders表取数据。
None.gif
select
*
into n1
from orders
None.gif
select
*
into n2
from orders
None.gif
None.gif
select
*
from n1
None.gif
select
*
from n2
None.gif
None.gif
--
添加主键,然后修改n1中若干字段的若干条
None.gif
alter
table n1
add
constraint pk_n1_id
primary
key (OrderID)
None.gif
alter
table n2
add
constraint pk_n2_id
primary
key (OrderID)
None.gif
None.gif
select OrderID
from (
select
*
from n1
union
select
*
from n2) a
group
by OrderID
having
count(
*)
>
1
None.gif
None.gif 应该可以,而且将不同的记录的ID显示出来。
None.gif 下面的适用于双方记录一样的情况,
None.gif
None.gif
select
*
from n1
where orderid
in (
select OrderID
from (
select
*
from n1
union
select
*
from n2) a
group
by OrderID
having
count(
*)
>
1)
None.gif 至于双方互不存在的记录是比较好处理的
None.gif
--
删除n1,n2中若干条记录
None.gif
delete
from n1
where orderID
in (
'
10728
',
'
10730
')
None.gif
delete
from n2
where orderID
in (
'
11000
',
'
11001
')
None.gif
None.gif
--
*************************************************************
None.gif
--
双方都有该记录却不完全相同
None.gif
select
*
from n1
where orderid
in(
select OrderID
from (
select
*
from n1
union
select
*
from n2) a
group
by OrderID
having
count(
*)
>
1)
None.gif
union
None.gif
--
n2中存在但在n1中不存的在10728,10730
None.gif
select
*
from n1
where OrderID
not
in (
select OrderID
from n2)
None.gif
union
None.gif
--
n1中存在但在n2中不存的在11000,11001
None.gif
select
*
from n2
where OrderID
not
in (
select OrderID
from n1)
None.gif
None.gif
* 四种方法取表里n到m条纪录:
None.gif
None.gif
1.
None.gif
select
top m
*
into 临时表(或表变量)
from tablename
order
by columnname
--
将top m笔插入
None.gif
set
rowcount n
None.gif
select
*
from 表变量
order
by columnname
desc
None.gif
None.gif
None.gif
2.
None.gif
select
top n
*
from (
select
top m
*
from tablename
order
by columnname) a
order
by columnname
desc
None.gif
None.gif
None.gif
3.如果tablename里没有其他identity列,那么:
None.gif
select
identity(
int) id0,
*
into #
temp
from tablename
None.gif
None.gif 取n到m条的语句为:
None.gif
select
*
from #
temp
where id0
>=n
and id0
<= m
None.gif
None.gif 如果你在执行select
identity(
int) id0,
*
into #
temp
from tablename这条语句的时候报错,那是因为你的DB中间的select
into
/bulkcopy属性没有打开要先执行:
None.gif
exec sp_dboption 你的DB名字,
'
select into/bulkcopy
',true
None.gif
None.gif
None.gif
4.如果表里有identity属性,那么简单:
None.gif
select
*
from tablename
where
identitycol
between n
and m
None.gif
None.gif
* 如何删除一个表中重复的记录?
None.gif
create
table a_dist(id
int,name
varchar(
20))
None.gif
None.gif
insert
into a_dist
values(
1,
'
abc
')
None.gif
insert
into a_dist
values(
1,
'
abc
')
None.gif
insert
into a_dist
values(
1,
'
abc
')
None.gif
insert
into a_dist
values(
1,
'
abc
')
None.gif
None.gif
exec up_distinct
'
a_dist
',
'
id
'
None.gif
None.gif
select
*
from a_dist
None.gif
None.gif
create
procedure up_distinct(
@t_name
varchar(
30),
@f_key
varchar(
30))
None.gif
--
f_key表示是分组字段﹐即主键字段
None.gif
as
None.gif
begin
None.gif
declare
@max
integer,
@id
varchar(
30) ,
@sql
varchar(
7999) ,
@type
integer
None.gif
select
@sql
=
'
declare cur_rows cursor for select
'
+
@f_key
+
'
,count(*) from
'
+
@t_name
+
'
group by
'
+
@f_key
+
'
having count(*) > 1
'
None.gif
exec(
@sql)
None.gif
open cur_rows
None.gif
fetch cur_rows
into
@id,
@max
None.gif
while
@@fetch_status
=
0
None.gif
begin
None.gif
select
@max
=
@max
-
1
None.gif
set
rowcount
@max
None.gif
select
@type
= xtype
from syscolumns
where id
=
object_id(
@t_name)
and name
=
@f_key
None.gif
if
@type
=
56
None.gif
select
@sql
=
'
delete from
'
+
@t_name
+
'
where
'
+
@f_key
+
'
=
'
+
@id
None.gif
if
@type
=
167
None.gif
select
@sql
=
'
delete from
'
+
@t_name
+
'
where
'
+
@f_key
+
'
=
'
+
''''
+
@id
+
''''
None.gif
exec(
@sql)
None.gif
fetch cur_rows
into
@id,
@max
None.gif
end
None.gif
close cur_rows
None.gif
deallocate cur_rows
None.gif
set
rowcount
0
None.gif
end
None.gif
None.gif
select
*
from systypes
None.gif
select
*
from syscolumns
where id
=
object_id(
'
a_dist
')
None.gif
None.gif
* 查询数据的最大排序问题(只能用一条语句写)
None.gif
CREATE
TABLE hard (qu
char (
11) ,co
char (
11) ,je numeric(
3,
0))
None.gif
None.gif
insert
into hard
values (
'
A
',
'
1
',
3)
None.gif
insert
into hard
values (
'
A
',
'
2
',
4)
None.gif
insert
into hard
values (
'
A
',
'
4
',
2)
None.gif
insert
into hard
values (
'
A
',
'
6
',
9)
None.gif
insert
into hard
values (
'
B
',
'
1
',
4)
None.gif
insert
into hard
values (
'
B
',
'
2
',
5)
None.gif
insert
into hard
values (
'
B
',
'
3
',
6)
None.gif
insert
into hard
values (
'
C
',
'
3
',
4)
None.gif
insert
into hard
values (
'
C
',
'
6
',
7)
None.gif
insert
into hard
values (
'
C
',
'
2
',
3)
None.gif
None.gif
None.gif 要求查询出来的结果如下:
None.gif
None.gif qu co je
None.gif
--
--------- ----------- -----
None.gif
A
6
9
None.gif A
2
4
None.gif B
3
6
None.gif B
2
5
None.gif C
6
7
None.gif C
3
4
None.gif
None.gif
None.gif 就是要按qu分组,每组中取je最大的前2位!!
None.gif 而且只能用一句sql语句!!!
None.gif
select
*
from hard a
where je
in (
select
top
2 je
from hard b
where a.qu
=b.qu
order
by je)
None.gif
None.gif
* 求删除重复记录的sql语句?
None.gif 怎样把具有相同字段的纪录删除,只留下一条。
None.gif 例如,表test里有id,name字段
None.gif 如果有name相同的记录 只留下一条,其余的删除。
None.gif name的内容不定,相同的记录数不定。
None.gif 有没有这样的sql语句?
None.gif
==============================
None.gif A:一个完整的解决方案:
None.gif
None.gif 将重复的记录记入temp1表:
None.gif
select
[
标志字段id
],
count(
*)
into temp1
from
[
表名
]
None.gif
group
by
[
标志字段id
]
None.gif
having
count(
*)
>
1
None.gif
None.gif
2、将不重复的记录记入temp1表:
None.gif
insert temp1
select
[
标志字段id
],
count(
*)
from
[
表名
]
group
by
[
标志字段id
]
having
count(
*)
=
1
None.gif
None.gif
3、作一个包含所有不重复记录的表:
None.gif
select
*
into temp2
from
[
表名
]
where 标志字段id
in(
select 标志字段id
from temp1)
None.gif
None.gif
4、删除重复表:
None.gif
delete
[
表名
]
None.gif
None.gif
5、恢复表:
None.gif
insert
[
表名
]
select
*
from temp2
None.gif
None.gif
6、删除临时表:
None.gif
drop
table temp1
None.gif
drop
table temp2
None.gif
================================
None.gif B:
None.gif
create
table a_dist(id
int,name
varchar(
20))
None.gif
None.gif
insert
into a_dist
values(
1,
'
abc
')
None.gif
insert
into a_dist
values(
1,
'
abc
')
None.gif
insert
into a_dist
values(
1,
'
abc
')
None.gif
insert
into a_dist
values(
1,
'
abc
')
None.gif
None.gif
exec up_distinct
'
a_dist
',
'
id
'
None.gif
None.gif
select
*
from a_dist
None.gif
None.gif
create
procedure up_distinct(
@t_name
varchar(
30),
@f_key
varchar(
30))
None.gif
--
f_key表示是分组字段﹐即主键字段
None.gif
as
None.gif
begin
None.gif
declare
@max
integer,
@id
varchar(
30) ,
@sql
varchar(
7999) ,
@type
integer
None.gif
select
@sql
=
'
declare cur_rows cursor for select
'
+
@f_key
+
'
,count(*) from
'
+
@t_name
+
'
group by
'
+
@f_key
+
'
having count(*) > 1
'
None.gif
exec(
@sql)
None.gif
open cur_rows
None.gif
fetch cur_rows
into
@id,
@max
None.gif
while
@@fetch_status
=
0
None.gif
begin
None.gif
select
@max
=
@max
-
1
None.gif
set
rowcount
@max
None.gif
select
@type
= xtype
from syscolumns
where id
=
object_id(
@t_name)
and name
=
@f_key
None.gif
if
@type
=
56
None.gif
select
@sql
=
'
delete from
'
+
@t_name
+
'
where
'
+
@f_key
+
'
=
'
+
@id
None.gif
if
@type
=
167
None.gif
select
@sql
=
'
delete from
'
+
@t_name
+
'
where
'
+
@f_key
+
'
=
'
+
''''
+
@id
+
''''
None.gif
exec(
@sql)
None.gif
fetch cur_rows
into
@id,
@max
None.gif
end
None.gif
close cur_rows
None.gif
deallocate cur_rows
None.gif
set
rowcount
0
None.gif
end
None.gif
None.gif
select
*
from systypes
None.gif
select
*
from syscolumns
where id
=
object_id(
'
a_dist
')
None.gif
None.gif
* 行列转换
--
普通
None.gif
None.gif 假设有张学生成绩表(CJ)如下
None.gif Name Subject Result
None.gif 张三 语文
80
None.gif 张三 数学
90
None.gif 张三 物理
85
None.gif 李四 语文
85
None.gif 李四 数学
92
None.gif 李四 物理
82
None.gif
None.gif 想变成
None.gif 姓名 语文 数学 物理
None.gif 张三
80
90
85
None.gif 李四
85
92
82
None.gif
None.gif
declare
@sql
varchar(
4000)
None.gif
set
@sql
=
'
select Name
'
None.gif
select
@sql
=
@sql
+
'
,sum(case Subject when
'''
+Subject
+
'''
then Result end) [
'
+Subject
+
'
]
'
None.gif
from (
select
distinct Subject
from CJ)
as a
None.gif
select
@sql
=
@sql
+
'
from test group by name
'
None.gif
exec(
@sql)
None.gif
None.gif 行列转换
--
合并
None.gif
None.gif 有表A,
None.gif id pid
None.gif
1
1
None.gif
1
2
None.gif
1
3
None.gif
2
1
None.gif
2
2
None.gif
3
1
None.gif 如何化成表B:
None.gif id pid
None.gif
1
1,
2,
3
None.gif
2
1,
2
None.gif
3
1
None.gif
None.gif 创建一个合并的函数
None.gif
create
function fmerg(
@id
int)
None.gif
returns
varchar(
8000)
None.gif
as
None.gif
begin
None.gif
declare
@str
varchar(
8000)
None.gif
set
@str
=
''
None.gif
select
@str
=
@str
+
'
,
'
+
cast(pid
as
varchar)
from 表A
where id
=
@id
None.gif
set
@str
=
right(
@str,
len(
@str)
-
1)
None.gif
return(
@str)
None.gif
End
None.gif
go
None.gif
None.gif
--
调用自定义函数得到结果
None.gif
select
distinct id,dbo.fmerg(id)
from 表A
None.gif
None.gif
* 如何取得一个数据表的所有列名
None.gif
None.gif 方法如下:先从SYSTEMOBJECT系统表中取得数据表的SYSTEMID,然后再SYSCOLUMN表中取得该数据表的所有列名。
None.gif SQL语句如下:
None.gif
declare
@objid
int,
@objname
char(
40)
None.gif
set
@objname
=
'
tablename
'
None.gif
select
@objid
= id
from sysobjects
where id
=
object_id(
@objname)
None.gif
select
'
Column_name
'
= name
from syscolumns
where id
=
@objid
order
by colid
None.gif
None.gif
None.gif
None.gif
SELECT
*
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME
=
'
users
'
None.gif
None.gif
* 通过SQL语句来更改用户的密码
None.gif
None.gif 修改别人的,需要sysadmin role
None.gif
EXEC sp_password
NULL,
'
newpassword
',
'
User
'
None.gif
None.gif 如果帐号为SA执行EXEC sp_password
NULL,
'
newpassword
', sa
None.gif
None.gif
* 怎么判断出一个表的哪些字段不允许为空?
None.gif
None.gif
select COLUMN_NAME
from INFORMATION_SCHEMA.COLUMNS
where IS_NULLABLE
=
'
NO
'
and TABLE_NAME
=tablename
None.gif
None.gif
* 如何在数据库里找到含有相同字段的表?
None.gif a. 查已知列名的情况
None.gif
SELECT b.name
as TableName,a.name
as columnname
None.gif
From syscolumns a
INNER
JOIN sysobjects b
None.gif
ON a.id
=b.id
None.gif
AND b.type
=
'
U
'
None.gif
AND a.name
=
'
你的字段名字
'
None.gif
None.gif
* 未知列名查所有在不同表出现过的列名
None.gif
Select o.name
As tablename,s1.name
As columnname
None.gif
From syscolumns s1, sysobjects o
None.gif
Where s1.id
= o.id
None.gif
And o.type
=
'
U
'
None.gif
And
Exists (
None.gif
Select
1
From syscolumns s2
None.gif
Where s1.name
= s2.name
None.gif
And s1.id
<> s2.id
None.gif )
None.gif
None.gif
* 查询第xxx行数据
None.gif
None.gif 假设id是主键:
None.gif
select
*
from (
select
top xxx
*
from yourtable) aa
where
not
exists(
select
1
from (
select
top xxx
-
1
*
from yourtable) bb
where aa.id
=bb.id)
None.gif
None.gif 如果使用游标也是可以的
None.gif
fetch absolute
[
number
]
from
[
cursor_name
]
None.gif 行数为绝对行数
None.gif
None.gif
* SQL Server日期计算
None.gif a. 一个月的第一天
None.gif
SELECT
DATEADD(mm,
DATEDIFF(mm,
0,
getdate()),
0)
None.gif b. 本周的星期一
None.gif
SELECT
DATEADD(wk,
DATEDIFF(wk,
0,
getdate()),
0)
None.gif c. 一年的第一天
None.gif
SELECT
DATEADD(yy,
DATEDIFF(yy,
0,
getdate()),
0)
None.gif d. 季度的第一天
None.gif
SELECT
DATEADD(qq,
DATEDIFF(qq,
0,
getdate()),
0)
None.gif e. 上个月的最后一天
None.gif
SELECT
dateadd(ms,
-
3,
DATEADD(mm,
DATEDIFF(mm,
0,
getdate()),
0))
None.gif f. 去年的最后一天
None.gif
SELECT
dateadd(ms,
-
3,
DATEADD(yy,
DATEDIFF(yy,
0,
getdate()),
0))
None.gif g. 本月的最后一天
None.gif
SELECT
dateadd(ms,
-
3,
DATEADD(mm,
DATEDIFF(m,
0,
getdate())
+
1,
0))
None.gif h. 本月的第一个星期一
None.gif
select
DATEADD(wk,
DATEDIFF(wk,
0,
None.gif
dateadd(dd,
6
-
datepart(
day,
getdate()),
getdate())
None.gif ),
0)
None.gif i. 本年的最后一天
None.gif
SELECT
dateadd(ms,
-
3,
DATEADD(yy,
DATEDIFF(yy,
0,
getdate())
+
1,
0))。
None.gif
None.gif
* 获取表结构
[
把 'sysobjects' 替换 成 'tablename' 即可
]
None.gif
None.gif
SELECT
CASE
IsNull(I.name,
'')
None.gif
When
''
Then
''
None.gif
Else
'
*
'
None.gif
End
as IsPK,
None.gif
Object_Name(A.id)
as t_name,
None.gif A.name
as c_name,
None.gif
IsNull(
SubString(M.
text,
1,
254),
'')
as pbc_init,
None.gif T.name
as F_DataType,
None.gif
CASE
IsNull(
TYPEPROPERTY(T.name,
'
Scale
'),
'')
None.gif
WHEN
''
Then
Cast(A.prec
as
varchar)
None.gif
ELSE
Cast(A.prec
as
varchar)
+
'
,
'
+
Cast(A.scale
as
varchar)
None.gif
END
as F_Scale,
None.gif A.isnullable
as F_isNullAble
None.gif
FROM Syscolumns
as A
None.gif
JOIN Systypes
as T
None.gif
ON (A.xType
= T.xUserType
AND A.Id
=
Object_id(
'
sysobjects
') )
None.gif
LEFT
JOIN ( SysIndexes
as I
None.gif
JOIN Syscolumns
as A1
None.gif
ON ( I.id
= A1.id
and A1.id
=
object_id(
'
sysobjects
')
and (I.status
&
0x800)
=
0x800
AND A1.colid
<= I.keycnt) )
None.gif
ON ( A.id
= I.id
AND A.name
=
index_col(
'
sysobjects
', I.indid, A1.colid) )
None.gif
LEFT
JOIN SysComments
as M
None.gif
ON ( M.id
= A.cdefault
and
ObjectProperty(A.cdefault,
'
IsConstraint
')
=
1 )
None.gif
ORDER
BY A.Colid
ASC
None.gif
None.gif
* 提取数据库内所有表的字段详细说明的SQL语句
None.gif
None.gif
SELECT
None.gif (
case
when a.colorder
=
1
then d.name
else
''
end) N
'
表名
',
None.gif a.colorder N
'
字段序号
',
None.gif a.name N
'
字段名
',
None.gif (
case
when
COLUMNPROPERTY( a.id,a.name,
'
IsIdentity
')
=
1
then
'
'
else
''
None.gif
end) N
'
标识
',
None.gif (
case
when (
SELECT
count(
*)
None.gif
FROM sysobjects
None.gif
WHERE (name
in
None.gif (
SELECT name
None.gif
FROM sysindexes
None.gif
WHERE (id
= a.id)
AND (indid
in
None.gif (
SELECT indid
None.gif
FROM sysindexkeys
None.gif
WHERE (id
= a.id)
AND (colid
in
None.gif (
SELECT colid
None.gif
FROM syscolumns
None.gif
WHERE (id
= a.id)
AND (name
= a.name)))))))
AND
None.gif (xtype
=
'
PK
'))
>
0
then
'
'
else
''
end) N
'
主键
',
None.gif b.name N
'
类型
',
None.gif a.length N
'
占用字节数
',
None.gif
COLUMNPROPERTY(a.id,a.name,
'
PRECISION
')
as N
'
长度
',
None.gif
isnull(
COLUMNPROPERTY(a.id,a.name,
'
Scale
'),
0)
as N
'
小数位数
',
None.gif (
case
when a.isnullable
=
1
then
'
'
else
''
end) N
'
允许空
',
None.gif
isnull(e.
text,
'') N
'
默认值
',
None.gif
isnull(g.
[
value
],
'')
AS N
'
字段说明
'
None.gif
FROM syscolumns a
None.gif
left
join systypes b
None.gif
on a.xtype
=b.xusertype
None.gif
inner
join sysobjects d
None.gif
on a.id
=d.id
and d.xtype
=
'
U
'
and d.name
<>
'
dtproperties
'
None.gif
left
join syscomments e
None.gif
on a.cdefault
=e.id
None.gif
left
join sysproperties g
None.gif
on a.id
=g.id
AND a.colid
= g.smallid
None.gif
order
by
object_name(a.id),a.colorder
None.gif
None.gif
* 快速获取表test的记录总数
[
对大容量表非常有效
]
None.gif
None.gif 快速获取表test的记录总数:
None.gif
select rows
from sysindexes
where id
=
object_id(
'
test
')
and indid
in (
0,
1)
None.gif
None.gif
update
2
set KHXH
=(ID
+
1)\
2 2行递增编号
None.gif
update
[
23
]
set id1
=
'
No.
'
+
right(
'
00000000
'
+id,
6)
where id
not
like
'
No%
'
//递增
None.gif
update
[
23
]
set id1
=
'
No.
'
+
right(
'
00000000
'
+
replace(id1,
'
No.
',
''),
6)
//补位递增
None.gif
delete
from
[
1
]
where (id
%
2)
=
1
None.gif 奇数
None.gif
None.gif
* 替换表名字段
None.gif
update
[
1
]
set domurl
=
replace(domurl,
'
Upload/Imgswf/
',
'
Upload/Photo/
')
where domurl
like
'
%Upload/Imgswf/%
'
None.gif
None.gif
* 截位
None.gif
SELECT
LEFT(表名,
5)
None.gif
None.gif熟悉SQL SERVER 2000的数据库管理员都知道,其DTS可以进行数据的导入导出,其实,我们也可以使用Transact
-SQL语句进行导入导出操作。在 Transact
-SQL语句中,我们主要使用OpenDataSource函数、
OPENROWSET 函数,关于函数的详细说明,请参考SQL联机帮助。利用下述方法,可以十分容易地实现SQL SERVER、ACCESS、EXCEL数据转换,详细说明如下:
None.gif
None.gif一、SQL SERVER 和ACCESS的数据导入导出
None.gif
None.gif常规的数据导入导出:
None.gif使用DTS向导迁移你的Access数据到SQL Server,你可以使用这些步骤:
None.gif  ○1在SQL SERVER企业管理器中的Tools(工具)菜单上,选择Data Transformation
None.gif  ○2Services(数据转换服务),然后选择 czdImport Data(导入数据)。
None.gif  ○3在Choose a Data Source(选择数据源)对话框中选择Microsoft Access
as the Source,然后键入你的.mdb数据库(.mdb文件扩展名)的文件名或通过浏览寻找该文件。
None.gif  ○4在Choose a Destination(选择目标)对话框中,选择Microsoft OLE DB Prov ider
for SQL Server,选择数据库服务器,然后单击必要的验证方式。
None.gif  ○5在Specify
Table Copy(指定表格复制)或Query(查询)对话框中,单击Copy tables(复制表格)。
None.gif ○6在Select Source Tables(选择源表格)对话框中,单击Select
All(全部选定)。下一步,完成。
None.gif
None.gifTransact
-SQL语句进行导入导出:
None.gif
1.在SQL SERVER里查询access数据:
None.gif
None.gif
SELECT
*
FROM
OpenDataSource(
'
Microsoft.Jet.OLEDB.4.0
',
'
Data Source="c:\DB.mdb";User ID=Admin;Password=
')
dot.gif表名
None.gif
None.gif
2.将access导入SQL server
None.gif在SQL SERVER 里运行:
None.gif
SELECT
*
INTO newtable
FROM
OPENDATASOURCE (
'
Microsoft.Jet.OLEDB.4.0
',
'
Data Source="c:\DB.mdb";User ID=Admin;Password=
' )
dot.gif表名
None.gif
None.gif
3.将SQL SERVER表里的数据插入到Access表中
None.gif在SQL SERVER 里运行:
None.gif
insert
into
OpenDataSource(
'
Microsoft.Jet.OLEDB.4.0
',
'
Data Source=" c:\DB.mdb";User ID=Admin;Password=
')
dot.gif表名 (列名1,列名2)
select 列名1,列名2
from sql表
None.gif
None.gif实例:
None.gif
insert
into
OPENROWSET(
'
Microsoft.Jet.OLEDB.4.0
',
'
C:\db.mdb
';
'
admin
';
'', Test)
select id,name
from Test
None.gif
None.gif
None.gif
INSERT
INTO
OPENROWSET(
'
Microsoft.Jet.OLEDB.4.0
',
'
c:\trade.mdb
';
'
admin
';
'', 表名)
SELECT
*
FROM sqltablename
None.gif
None.gif二、SQL SERVER 和EXCEL的数据导入导出
None.gif
None.gif
1、在SQL SERVER里查询Excel数据:
None.gif
None.gif
SELECT
*
FROM
OpenDataSource(
'
Microsoft.Jet.OLEDB.4.0
',
'
Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0
')
dot.gif
[
Sheet1$
]
None.gif
None.gif下面是个查询的示例,它通过用于 Jet 的 OLE DB 提供程序查询 Excel 电子表格。
None.gif
SELECT
*
FROM
OpenDataSource (
'
Microsoft.Jet.OLEDB.4.0
',
'
Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0
')
dot.gifxactions
None.gif
None.gif
2、将Excel的数据导入SQL server :
None.gif
SELECT
*
into newtable
FROM
OpenDataSource(
'
Microsoft.Jet.OLEDB.4.0
',
'
Data Source="c:\book1.xls";User ID=Admin;Password=;Extended properties=Excel 5.0
')
dot.gif
[
Sheet1$
]
None.gif
None.gif实例:
None.gif
SELECT
*
into newtable
FROM
OpenDataSource(
'
Microsoft.Jet.OLEDB.4.0
',
'
Data Source="c:\Finance\account.xls";User ID=Admin;Password=;Extended properties=Excel 5.0
')
dot.gifxactions
None.gif
None.gif
3、将SQL SERVER中查询到的数据导成一个Excel文件
None.gifT
-SQL代码:
None.gif
EXEC master..xp_cmdshell
'
bcp 库名.dbo.表名out c:\Temp.xls -c -q -S"servername" -U"sa" -P""
'
None.gif参数:S 是SQL服务器名;U是用户;P是密码
None.gif说明:还可以导出文本文件等多种格式
None.gif
None.gif实例:
EXEC master..xp_cmdshell
'
bcp saletesttmp.dbo.CusAccount out c:\temp1.xls -c -q -S"pmserver" -U"sa" -P"sa"
'
None.gif
None.gif
EXEC master..xp_cmdshell
'
bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout C:\ authors.xls -c -Sservername -Usa -Ppassword
'
None.gif
None.gif在VB6中应用ADO导出EXCEL文件代码:
None.gifDim cn
As New ADODB.Connection
None.gifcn.
open "Driver
={SQL Server};Server
=WEBSVR;
DataBase
=WebMis;UID
=sa;WD
=
123;"
None.gifcn.
execute "master..xp_cmdshell
'
bcp "SELECT col1, col2 FROM 库名.dbo.表名" queryout E:\DT.xls -c -Sservername -Usa -Ppassword
'"
None.gif
None.gif
None.gif
4、在SQL SERVER里往Excel插入数据:
None.gif
None.gif
insert
into
OpenDataSource(
'
Microsoft.Jet.OLEDB.4.0
',
'
Data Source="c:\Temp.xls";User ID=Admin;Password=;Extended properties=Excel 5.0
')
dot.giftable1 (A1,A2,A3)
values (
1,
2,
3)
None.gif
None.gifT
-SQL代码:
None.gif
INSERT
INTO
None.gif
OPENDATASOURCE(
'
Microsoft.JET.OLEDB.4.0
',
'
Extended Properties=Excel 8.0;Data source=C:\training\inventur.xls
')
dot.gif
[
Filiale1$
] (bestand, produkt)
VALUES (
20,
'
Test
')
None.gif
None.gif总结:利用以上语句,我们可以方便地将SQL SERVER、ACCESS和EXCEL电子表格软件中的数据进行转换,为我们提供了极大方便!
本文转自高海东博客园博客,原文链接:http://www.cnblogs.com/ghd258/archive/2006/10/28/542831.html,如需转载请自行联系原作者
你可能感兴趣的文章
apache 虚拟主机详细配置:http.conf配置详解
查看>>
ON DUPLICATE KEY UPDATE
查看>>
SRA秘钥生成与解密
查看>>
Spring Cloud 5分钟搭建教程(附上一个分布式日志系统项目作为参考) - 推荐
查看>>
JSON.parseObject(String str)与JSONObject.parseObject(String str)的区别
查看>>
Word中摘要和正文同时分栏后,正文跑到下一页,怎么办?或Word分栏后第一页明明有空位后面的文字却自动跳到第二页了,怎么办?...
查看>>
android JNI调用(Android Studio 3.0.1)(转)
查看>>
元类型与类型的区别
查看>>
【Android Studio安装部署系列】目录
查看>>
长生生物狂犬病疫苗造假
查看>>
牛客网_Go语言相关练习_选择题(2)
查看>>
Spring Boot 静态资源访问原理解析
查看>>
[Leetcode] Next Permutation
查看>>
美国移民局的I797表原件和I129表是什么呢
查看>>
jqGrid + JSON + WebService 完整示例
查看>>
Delphi工具之TDUMP
查看>>
ASP.NET笔记(三)
查看>>
QEvent Class Reference
查看>>
转:探索 AIX 6:在 AIX 6 上配置 iSCSI Target
查看>>
ASP入门(十一)-Session小案例
查看>>