sql server 中如何把表中的数据导出来

henghe98 2010-12-20 05:26:04
如上所说
...全文
375 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
henghe98 2010-12-20
  • 打赏
  • 举报
回复
数据库自带的导出功能,不能导出表中的数据的呀。我要的是导出里面的数据,比如把一个表中的数据导出城。sql文件
songguozhi 2010-12-20
  • 打赏
  • 举报
回复
DECLARE @SQL	VARCHAR(max),
@tabName VARCHAR(128),
@colName VARCHAR(128),
@colType VARCHAR(128),
@cols VARCHAR(max),
@colsData VARCHAR(max),
@colsNULL VARCHAR(max),
@SQLIdentityOn VARCHAR(MAX),
@SQLIdentityOff VARCHAR(MAX),
@SQLDelete VARCHAR(max),
@IncludeIdentity BIT,--是否包含自增字段
@DeleteOldData BIT --插入前删除所有数据

DECLARE @colList TABLE(colName VARCHAR(128), colType VARCHAR(128), colValueL VARCHAR(120), colValueR VARCHAR(120), selColName VARCHAR(128));

SET NOCOUNT ON
DECLARE tab_cur CURSOR FOR
--SELECT NAME FROM sys.tables WHERE type = 'U' ORDER BY object_id ASC;
SELECT name FROM sys.tables WHERE name='sysdiagrams'
ORDER BY object_id
SELECT @IncludeIdentity=1, @DeleteOldData=1;
OPEN tab_cur
FETCH NEXT FROM tab_cur INTO @tabName
WHILE @@FETCH_STATUS=0 BEGIN

DELETE FROM @colList
--SELECT @tabName='modules', @IncludeIdentity=1, @DeleteOldData=1;

IF NOT EXISTS(SELECT 1 FROM sys.objects WHERE name=@tabName AND type='U') BEGIN
RAISERROR(N'表不存在!', 16, -1);
RETURN;
END

INSERT INTO @colList(colName, colType, colValueL, colValueR)
SELECT c.NAME, t.name, '','' FROM sys.columns c
INNER JOIN sys.types t
ON c.system_type_id = t.system_type_id
WHERE c.object_id=object_id(@tabName)

DELETE FROM @colList WHERE colType='sysname'
AND colName IN(SELECT colName FROM @colList WHERE colType != 'sysname')

IF @IncludeIdentity=0
DELETE FROM @colList WHERE colName IN(
SELECT name FROM sys.columns WHERE object_id = OBJECT_ID(@tabName) AND is_identity=1)

UPDATE @colList SET colValueL='RTRIM(', colValueR = ')'
WHERE colType IN('text', 'varchar', 'nvarchar', 'char', 'uniqueidentifier', 'datetime', 'nchar')

SELECT @cols='', @colsData = '', @colsNULL='', @SQL = '';

UPDATE @colList SET colName = '[' + colName + ']'
UPDATE @colList SET selColName=colName


UPDATE @colList SET colValueL='replace('+colValueL, colValueR = colValueR+','''''''','''''''''''')'
WHERE colType IN('text', 'varchar', 'nvarchar', 'char', 'nchar')

UPDATE @colList SET colValueL='replace('+colValueL, colValueR = colValueR+',char(10),'' '')'
WHERE colType IN('text', 'varchar', 'nvarchar', 'char', 'nchar')

UPDATE @colList SET colValueL='replace('+colValueL, colValueR = colValueR+',char(13),'' '')'
WHERE colType IN('text', 'varchar', 'nvarchar', 'char', 'nchar')

-- UPDATE @colList SET colValueL='replace('+colValueL, colValueR = colValueR+',char(9),'' '')'
-- WHERE colType IN('text', 'varchar', 'nvarchar', 'char', 'nchar')

UPDATE @colList SET colValueL=
CASE WHEN colType IN('text', 'varchar', 'nvarchar', 'char', 'uniqueidentifier', 'datetime', 'nchar') THEN '''''''''+' ELSE '' END
+colValueL,
colValueR = colValueR + CASE WHEN colType IN('text', 'varchar', 'nvarchar', 'char', 'nchar', 'datetime', 'uniqueidentifier') THEN '+''''''''' ELSE '' END

SELECT @cols = @cols + colName + ',',
@colsData = @colsData + colValueL +
CASE WHEN colType='datetime' THEN 'convert(varchar(20),'+colName+',120)'
WHEN colType='uniqueidentifier'THEN 'convert(varchar(50),'+colName+')'
WHEN colType='text'THEN 'convert(varchar(max),'+colName+')'
ELSE colName END
+ colValueR + ' as '''+ colName + ''','','',',
@colsNULL = @colsNULL + 'NULL as '''+ colName + ''','' '','
FROM @colList
PRINT @colsData
SELECT @cols = LEFT(@cols, LEN(@cols)-1),
@colsData = LEFT(@colsData, LEN(@colsData)-5),
@colsNULL = LEFT(@colsNULL, LEN(@colsNULL)-1)
PRINT @colsData

SELECT @SQL=@SQL + 'select '';'' +
''INSERT INTO '+@tabName + '('+@cols+')' +
' VALUES('' ''--INSERT SQL--'','+ @colsData + ','')'''+
' FROM '+ @tabName
IF @DeleteOldData=1
SET @SQLDelete = 'select '';'' +
''Delete from '+@tabName + ';-- ' +
''' ''--INSERT SQL--'','+ @colsNULL +
' union all '
ELSE
SET @SQLDelete=''

--PRINT '--================================================================'
PRINT '---TABLE:'+@tabName
IF @IncludeIdentity=1 AND EXISTS(SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID(@tabName) AND is_identity=1)
BEGIN
SELECT @SQLIdentityOn = 'select '';'' +
''SET IDENTITY_INSERT '+@tabName + ' ON; -- ' +
''' ''--INSERT SQL--'','+ @colsNULL +
' union all ',
@SQLIdentityOff = ' union all ' + 'select '';'' +
''SET IDENTITY_INSERT '+@tabName + ' OFF; -- ' +
''' ''--INSERT SQL--'','+ @colsNULL
END
ELSE
BEGIN
SELECT @SQLIdentityOff = '',
@SQLIdentityOn = '';
END

EXECUTE(@SQLDelete + @SQLIdentityOn + @SQL + @SQLIdentityOff)

FETCH NEXT FROM tab_cur INTO @tabName
END

CLOSE tab_cur
DEALLOCATE tab_cur
-晴天 2010-12-20
  • 打赏
  • 举报
回复
右击数据库名--->任务--->导出数据
下面的你一步步摸索吧.根据导出文件格式的不同而有所不同.
-晴天 2010-12-20
  • 打赏
  • 举报
回复
用导出向导.
王向飞 2010-12-20
  • 打赏
  • 举报
回复
如下:
/******* 导出到excel *****/
EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""'

/*********** 导入Excel *****/
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions

/*动态文件名
declare @fn varchar(20),@s varchar(1000)
set @fn = 'c:\test.xls'
set @s ='''Microsoft.Jet.OLEDB.4.0'',
''Data Source="'+@fn+'";User ID=Admin;Password=;Extended properties=Excel 5.0'''
set @s = 'SELECT * FROM OpenDataSource ('+@s+')...sheet1$'
exec(@s)
*/

SELECT cast(cast(科目编号 as numeric(10,2)) as nvarchar(255))+' ' 转换后的别名
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions

/********************** EXCEL导到远程SQL
insert OPENDATASOURCE(
'SQLOLEDB',
'Data Source=远程ip;User ID=sa;Password=密码'
).库名.dbo.表名 (列名1,列名2)
SELECT 列名1,列名2
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions


/** 导入文本文件
EXEC master..xp_cmdshell 'bcp dbname..tablename in c:\DT.txt -c -Sservername -Usa -Ppassword'

/** 导出文本文件
EXEC master..xp_cmdshell 'bcp dbname..tablename out c:\DT.txt -c -Sservername -Usa -Ppassword'

EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword'

导出到TXT文本,用逗号分开
exec master..xp_cmdshell 'bcp "库名..表名" out "d:\tt.txt" -c -t ,-U sa -P password'


BULK INSERT 库名..表名
FROM 'c:\test.txt'
WITH (
FIELDTERMINATOR = ';',
ROWTERMINATOR = '\n'
)


--/* dBase IV文件
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'dBase IV;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料4.dbf]')
--*/

--/* dBase III文件
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'dBase III;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料3.dbf]')
--*/

--/* FoxPro 数据库
select * from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\',
'select * from [aa.DBF]')
--*/

/**************导入DBF文件****************/
select * from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;
SourceDB=e:\VFP98\data;
SourceType=DBF',
'select * from customer where country != "USA" order by country')
go
/***************** 导出到DBF ***************/
如果要导出数据到已经生成结构(即现存的)FOXPRO表中,可以直接用下面的SQL语句

insert into openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\',
'select * from [aa.DBF]')
select * from 表

说明:
SourceDB=c:\ 指定foxpro表所在的文件夹
aa.DBF 指定foxpro表的文件名.


/*************导出到Access********************/
insert into openrowset('Microsoft.Jet.OLEDB.4.0',
'x:\A.mdb';'admin';'',A表) select * from 数据库名..B表

/*************导入Access********************/
insert into B表 selet * from openrowset('Microsoft.Jet.OLEDB.4.0',
'x:\A.mdb';'admin';'',A表)

文件名为参数
declare @fname varchar(20)
set @fname = 'd:\test.mdb'
exec('SELECT a.* FROM opendatasource(''Microsoft.Jet.OLEDB.4.0'',
'''+@fname+''';''admin'';'''', topics) as a ')

SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="f:\northwind.mdb";Jet OLEDB:Database Password=123;User ID=Admin;Password=;')...产品

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧