SQL Server中的数据自动导出到Access中,这个问题您是怎么解决的

如题,我用csdn那个帖子里发的存储过程,也是报错,你当时是怎么解决的、?... 如题,我用csdn那个帖子里发的存储过程,也是报错,你当时是怎么解决的、? 展开
 我来答
一点设计演示
高粉答主

推荐于2016-07-19 · 职场/教育各类模板,衷于原创
一点设计演示
采纳数:874 获赞数:83606

向TA提问 私信TA
展开全部

一、打开SqlServer2005,登录--选择需要目标数据库--右键数据库--任务--导入数据。

二、选择要复制的数据源。数据源选择Microsoft access--浏览你的数据源文件。这里的access数据源,如果你生成表过大,可以生成多个相同表结构的表。在导入数据直接到SqlServer某一张表。这样你的大数据就可以集中在同一张表,但是要切记,表结构要一样。

三、选择目标指定将数据复制在何处。这里面服务器名称可以服务器名也可以网络ip。使用SqlServer身份验证,选择目标数据库--复制一个或者多个表视图的数据。


四、选择导入到目标表或者导入新建表。执行--完成。

今至电子科技有限公司
2024-08-23 广告
数据库备份是确保数据安全与业务连续性的关键环节。我们上海今至电子科技有限公司高度重视数据保护,定期执行全面的数据库备份策略。这包括使用先进工具和技术,对关键业务数据进行自动化备份,并存储在安全可靠的外部存储介质或云端。通过定期验证备份的完整... 点击进入详情页
本回答由今至电子科技有限公司提供
边城浪子_tli
推荐于2016-01-05 · 超过19用户采纳过TA的回答
知道答主
回答量:43
采纳率:0%
帮助的人:35.5万
展开全部

我们用的SSIS包,

  1. 要让SQL2008及以上能显示OFFICE2007的文件选项,先在SQL服务器上装上office2007的组件,
    AccessDatabaseEngine_2010_x64.exe   AccessDatabaseEngine_2007_x86.exe    

  2. 在SQL中创建一个SSIS包,将Access文件名,SQL语句(新增表,删除表),设为一个变量,可传参数。(SQL与access一起工作时,主要就是不能判断表是否存在),所以,直接删除(不存在会报错,直接忽略就是),然后再创建表。(这个包,附件上了)

  3. SQL导数据时,直接调用 SSIS包导数据就好了,这时就可以自己写存储过程了。

    具体,可能较麻烦,特别如果你没做过SSIS包。

  4. 下面是部分存储过程,因是客户的资料,只能共享部分给你了,

  5.  IF NOT EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N''[dbo].[vi_Columns]''))
     BEGIN
      SELECT @SQL=''CREATE VIEW [dbo].[vi_Columns] AS
         SELECT distinct obj.name AS TableName, col.colorder, col.name AS ColumnName, typ.name AS TypeName, col.prec
         FROM dbo.syscolumns AS col LEFT OUTER JOIN
          dbo.systypes AS typ ON col.xtype = typ.xusertype INNER JOIN
          dbo.sysobjects AS obj ON col.id = obj.id AND obj.xtype = ''''U'''' AND obj.status >= 0 INNER join
          dbo.RS_EXPORT_SETTING as [exp] ON [exp].IMPORT_TABLE_NAME=obj.name and ([exp].IMPORT_COLUMN_NAME=''''-'''' or
          ([exp].IMPORT_COLUMN_NAME !=''''-'''' and patindex(''''%''''+ col.Name+''''%'''',[exp].IMPORT_COLUMN_NAME)>0))''
      EXEC(@SQL)
     END

    以上是创建一个视图,用来获得表中的字段的,因,我们有部分表只要导出部分字段

  6. 以下是导数据的存储过程中的部分代码

  7.     --Get joint columns name, which looks like: `fileID` VarChar(2),`aod` DateTime,`branch` VarChar(4),`sbrch` VarChar(3),
        SELECT @SQLCreate=(SELECT CHAR(96) + ColumnName + CHAR(96) + '' '' +
          CASE WHEN TypeName in(''varchar'',''nvarchar'',''char'',''nchar'',''varbinary'',''binary'') THEN
           CASE WHEN Prec<256 THEN ''VarChar('' + CONVERT(NVARCHAR(3), Prec) + '')'' ELSE ''LongText'' END
           WHEN TypeName in (''numeric'', ''decimal'', ''float'', ''currency'') THEN ''Double''
           WHEN TypeName in (''int'') THEN ''Long''
           WHEN TypeName in (''datetime'', ''date'') THEN ''DateTime''
           ELSE ''LongText''
          END + '',''
         FROM vi_Columns as b WHERE b.TableName = a.TableName FOR XML PATH(''''))
        FROM vi_Columns as a 
        WHERE TableName=@SourceTableName
        GROUP BY TableName
        
        SELECT @SQLCreate=''Create Table '' + @DestTableName + '' ('' + SUBSTRING(@SQLCreate, 1, LEN(@SQLCreate)-1) + '')''
        SELECT @SQLDrop=''DROP TABLE '' + @DestTableName
        
        SELECT @SQL = ''dtexec /F "'' + @SSISFile + ''"''
        --Set variables''s value in SSIS file
        SELECT @SQL = @SQL + '' /SET \Package.Variables[User::FilePath].Properties[Value];"'' + @EUCFileName + ''"''
        SELECT @SQL = @SQL + '' /SET \Package.Variables[User::SQLDrop].Properties[Value];"'' + @SQLDrop + ''"''
        SELECT @SQL = @SQL + '' /SET \Package.Variables[User::SQLCreate].Properties[Value];"'' + @SQLCreate + ''"''
        
        --Drop table and create it again according to the "DestTableName" by calling the SSIS file
        EXEC @returncode=master..xp_cmdshell @SQL, no_output
                   
        --error happend when drop or create table     BEGIN

  8.     IF @returncode <> 0
        --sava fail message   
        SET @createMessage = @createMessage + @DestTableName + '',''
        ELSE
        BEGIN
         -- Insert the data into the destination table in EUC file from the source table in SQL Server
         SET @columenSQL = N''SELECT @importColumenName=[IMPORT_COLUMN_NAME] FROM [dbo].[RS_EXPORT_SETTING] WHERE [IMPORT_TABLE_NAME] = ''''''+ @SourceTableName + ''''''''
         EXEC sp_executesql @columenSQL,N''@importColumenName nvarchar(4000) output'',@importColumenName=@importColumenName output

 

     IF @importColumenName = ''-''
     BEGIN      
      SELECT @SQL=''INSERT INTO OPENROWSET(''''Microsoft.ACE.OLEDB.12.0'''', '''''' + @EUCFileName +
          ''''''; ''''admin'''';'''''''','' + @DestTableName +
          '') SELECT * FROM '' + @SourceTableName
     END
     ELSE
     BEGIN
      SELECT @SQL=''INSERT INTO OPENROWSET(''''Microsoft.ACE.OLEDB.12.0'''', '''''' + @EUCFileName +
          ''''''; ''''admin'''';'''''''','' + @DestTableName +
          '') SELECT ''+@importColumenName+'' FROM '' + @SourceTableName
     END

来自:求助得到的回答
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
helly84
2014-06-24 · TA获得超过329个赞
知道小有建树答主
回答量:737
采纳率:77%
帮助的人:326万
展开全部
企业管理器有这个功能。
export
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式