问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

sql server 怎么把数据导出来

发布网友 发布时间:2022-04-19 12:41

我来回答

2个回答

懂视网 时间:2022-05-03 03:06

1. 语法详解

OPENROWSET 
( { ‘provider_name‘ , { ‘datasource‘ ; ‘user_id‘ ; ‘password‘ 
 | ‘provider_string‘ } 
 , { [ catalog. ] [ schema. ] object 
 | ‘query‘ 
 } 
} ) 
 

 

provider_name:字符串,表示在注册表中指定的 OLE DB 访问接口的友好名称)。 provider_name 没有默认值 

 

datasource:对应于特定 OLE DB 数据源的字符串常量。 datasource 是要传递给提供程序的 IDBProperties 接口的 DBPROP_INIT_DATASOURCE 属性,该属性用于初始化提供

       程序 。 通常,此字符串包含数据库文件的名称、数据库服务器的名称,或者访问接口能理解的用于定位数据库的名称。

 

user_id:字符串常量,它是传递给指定 OLE DB 访问接口的用户名。 user_id 为连接指定安全上下文,并作为 DBPROP_AUTH_USERID 属性传入以初始化提供程序 。

 

password:字符串常量,它是传递给 OLE DB 访问接口的用户密码。 在初始化提供程序时,password 作为 DBPROP_AUTH_PASSWORD 属性传入 。

 

 

provider_string:访问接口特定的连接字符串,作为 DBPROP_INIT_PROVIDERSTRING 属性传入以初始化 OLE DB 访问接口。 provider_string 通常封装初始化提供程序所需的

        所有连接信息 。

 

catalog:指定对象所在的目录或数据库的名称。

 

schema:架构的名称或指定对象的对象所有者名称。

 

object:架构的名称或指定对象的对象所有者名称。

 

query:字符串常量,发送到访问接口并由访问接口执行。 SQL Server 的本地实例不处理该查询,但处理由访问接口返回的查询结果(传递查询)。 有些访问接口并不通过表名而

    是通过命令语言提供其表格格式数据,将传递查询用于这些访问接口是非常有用的。 只要查询提供程序支持 OLE DB Command 对象及其强制接口,那么在远程服务器上

    就支持传递查询。

 

注:如果 OLE DB 提供程序在指定的数据源中支持多个目录和架构,那么就需要目录及架构名称。如果 OLE DB 提供程序并不支持目录和架构,那么可以省略 catalog 及 schema 的

  值。 如果提供程序只支持架构名,那么必须指定一个两部分名称,形式为 schema.object。如果提供程序只支持目录名,那么必须指定一个三部分名称

  ,形式为 catalog.schema.object。

 

  OPENROWSET 不接受参数变量。

 

权限:OPENROWSET 权限由传递到 OLE DB 提供程序的用户名的权限确定。 

 

2. 示例

 

SELECT * FROM OPENROWSET(‘SQLNCLI‘,
‘server=IP地址;uid=账号;pwd=密码;database=数据库名称‘,
‘SELECT * FROM _category‘);

 

3. 错误描述

OLE DB 错误:OLE DB 或 ODBC 错误

  发生这种问题是因为 SQL SERVER 只提供一组特定访问接口的进程内访问。SQLNCLI.1 是 SQL SERVER 的一个新的本机 OLE DB 访问接口,它具有访问权。但是 SQLNCLI.1 是特定于版本的 SQLNCLI 访问接口,他不在访问接口的列表中,因此 SQLNCI.1 没有访问权,尽管 SQLNCLI 和 SQLNCLI.1 完全相同(因为 SQLNCLI 指向 SQLNCI.1),但 SQL SERVER 并不能识别出它们是相同的,SQL SERVER 会阻止对 SQLNCI.1 的访问

 

  要解决此问题,请使用下列方法之一:

  • 在 OLE DB 连接字符串中使用 SQLNCLI 和 SQLOLEDB  代替 SQLNCLI.1
  • 在 SQL SERVER 中,将  SQLNCLI.1 显示添加到具有进程内访问权的供应商列表中
  •  

      

     

    SQLSERVER调用OPENROWSET的方法

    标签:style   span   安全   语句   obj   多个   程序   默认   封装   

    热心网友 时间:2022-05-03 00:14

    目前主要提到了三种办法,一种在程序中调用DTS,二种使用SQL SERVER带的BCP功能,三种使用openrowset。
    具体看下面:
    这是利用BCP来做的,

    使用SQLServer自带的bcp命令——
    bcp 数据库名.dbo.表名 out 文件名 –c –q –S”服务器名” –U”用户名” –P”密码”
    bcp ”select 语句” queryout 文件名 –c –q –S”服务器名” –U”用户名” –P”密码”

    导出整张表:
    EXEC master..xp_cmdshell 'bcp "inter_custom.dbo.out_ck1" out c:\Temp.xls -c -q -S"PETER" -U"sa" -P"davey@citiz.net"'

    根据Query语句导出:
    EXEC master..xp_cmdshell 'bcp "select * from inter_custom.dbo.out_ck1" queryout c:\Temp.xls -c -q -S"PETER" -U"sa" -P"davey@citiz.net"'
    利用bcp要求数据库的服务器名,数据库用户名和密码,这些必须传到程序中。方法可以有很多中,大概的例子,可以看:
    http://www.cnblogs.com/kevin/archive/2004/09/21/45351.html

    利用openrowset可以写存储过程,可以看下面的例子
    引自CSDN的邹建大大

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_exporttb]') and OBJECTPROPERTY(id, N'IsProcere') = 1)
    drop procere [dbo].[p_exporttb]
    GO

    /*--数据导出EXCEL

    导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件
    如果文件不存在,将自动创建文件
    如果表不存在,将自动创建表
    基于通用性考虑,仅支持导出标准数据类型

    --邹建 2003.10(引用请保留此信息)--*/

    /*--调用示例

    p_exporttb @sqlstr='select * from 地区资料'
    ,@path='c:\',@fname='aa.xls',@sheetname='地区资料'
    --*/
    create proc p_exporttb
    @sqlstr varchar(8000),--查询语句,如果查询语句中使用了order by ,请加上top 100 percent
    @path nvarchar(1000),--文件存放目录
    @fname nvarchar(250),--文件名
    @sheetname varchar(250)=''--要创建的工作表名,默认为文件名
    as
    declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int
    declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000)

    --参数检测
    if isnull(@fname,'')=''set @fname='temp.xls'
    if isnull(@sheetname,'')='' set @sheetname=replace(@fname,'.','#')

    --检查文件是否已经存在
    if right(@path,1)<>'\' set @path=@path+'\'
    create table #tb(a bit,b bit,c bit)
    set @sql=@path+@fname
    insert into #tb exec master..xp_fileexist @sql

    --数据库创建语句
    set @sql=@path+@fname
    if exists(select 1 from #tb where a=1)
    set @constr='DRIVER={Microsoft Excel Driver (*.xls)};DSN='''';READONLY=FALSE'
    +';CREATE_DB="'+@sql+'";DBQ='+@sql
    else
    set @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 8.0;HDR=YES'
    +';DATABASE='+@sql+'"'

    --连接数据库
    exec @err=sp_oacreate 'adodb.connection',@obj out
    if @err<>0 goto lberr

    exec @err=sp_oamethod @obj,'open',null,@constr
    if @err<>0 goto lberr

    --创建表的SQL
    declare @tbname sysname
    set @tbname='##tmp_'+convert(varchar(38),newid())
    set @sql='select * into ['+@tbname+'] from('+@sqlstr+') a'
    exec(@sql)

    select @sql='',@fdlist=''
    select @fdlist=@fdlist+',['+a.name+']'
    ,@sql=@sql+',['+a.name+'] '
    +case
    when b.name like '%char'
    then case when a.length>255 then 'memo'
    else 'text('+cast(a.length as varchar)+')' end
    when b.name like '%int' or b.name='bit' then 'int'
    when b.name like '%datetime' then 'datetime'
    when b.name like '%money' then 'money'
    when b.name like '%text' then 'memo'
    else b.name end
    FROM tempdb..syscolumns a left join tempdb..systypes b on a.xtype=b.xusertype
    where b.name not in('image','uniqueidentifier','sql_variant','varbinary','binary','timestamp')
    and a.id=(select id from tempdb..sysobjects where name=@tbname)

    if @@rowcount=0 return

    select @sql='create table ['+@sheetname
    +']('+substring(@sql,2,8000)+')'
    ,@fdlist=substring(@fdlist,2,8000)

    exec @err=sp_oamethod @obj,'execute',@out out,@sql
    if @err<>0 goto lberr

    exec @err=sp_oadestroy @obj

    --导入数据
    set @sql='openrowset(''MICROSOFT.JET.OLEDB.4.0'',''Excel 8.0;HDR=YES
    ;DATABASE='+@path+@fname+''',['+@sheetname+'$])'

    exec('insert into '+@sql+'('+@fdlist+') select '+@fdlist+' from ['+@tbname+']')

    set @sql='drop table ['+@tbname+']'
    exec(@sql)
    return

    lberr:
    exec sp_oageterrorinfo 0,@src out,@desc out
    lbexit:
    select cast(@err as varbinary(4)) as 错误号
    ,@src as 错误源,@desc as 错误描述
    select @sql,@constr,@fdlist
    go
    从DataGrids中导出数据到Excel
    DataSet结果导出到Excel
    Export DataSets to Excel...
    导出到Excel的四种方法
    关于从net程序如何导出到excel微软的msdn有专门的讲述,在上面可以搜到。
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    器世间的意思是什么 学吉他大概学费是多少 电吉他培训一般学费多少 天津吉他培训成人班费用多少 吉他培训班一般的学费多少钱 电脑怎么保存下载的视频文件怎么把视频保存到电脑上 双子座男生如果受到伤害死心了'是不是无论怎么做都无法挽回了。 和平精英微信怎么切换账号 更新之后换号方法 有关说说搞笑幽默句子的短句(寻找搞笑幽默的快乐) 说说你多大了,看看能不能做我干闺女怎么回复? 急!如何将查询出来的sql数据库的数据导出EXCEL 在sql server2000中如何导出数据 sql server怎么导出数据 怎样在SQL里导出数据? 怎么导出 sql 表里所有数据 mysql怎么导出sql文件 mysql如何导出sql文件 sql server 怎么导出一张表中的数据啊 sqlserver怎么导出数据库 SQL数据库怎么导入导出数据 如何导出sql文件 Sql Server 数据库怎么导出一张表的数据 SQL数据库如何导出数据库和表中需要的数据 plsql如何导出数据库整个库 如何用sql将数据库的数据导出来 SQL如何导入数据和导出数据 手机号注销了,(现在不记得了),怎么找回QQ密码? 手机号码忘记了,怎么注销 手机号忘记注销了怎么办? 不用了的手机号怎么注销,已经忘记号码了 sql developer怎么导出数据库 sqlserver 怎么导出数据库的表 酸甜樱桃酱的做法步骤图,酸甜樱桃酱怎么做 红酒樱桃酱的做法步骤图,红酒樱桃酱怎么做 爱心蜂蜜樱桃酱的做法步骤图,怎么做好 正值季节熬樱桃酱的做法步骤图,怎么做好吃 樱桃酱的制作过程 樱桃酱可以做馒头吗? 一块三角黑森林蛋糕多少克 自制蓝莓酱的做法步骤图,自制蓝莓酱怎么做 用樱桃做的食物 正宗德国黑森林蛋糕怎么做 七月樱桃酱在哪个区 关于IG(绿鬣蜥)饲养的问题 哥瑞纳-帕达诺奶酪的食用方法 关于波尔多产区红酒 蛋糕店的草莓都是在哪买的? 三江古茶为何能治疗牙疼? 三江古茶官网多少? 请问三江黄茶有用吗