2024-10-31 09:00:58
一、打开SqlServer2005,登录--选择需要目标数据库--右键数据库--任务--导入数据。
二、选择要复制的数据源。数据源选择Microsoft access--浏览你的数据源文件。这里的access数据源,如果你生成表过大,可以生成多个相同表结构的表。在导入数据直接到SqlServer某一张表。这样你的大数据就可以集中在同一张表,但是要切记,表结构要一样。
三、选择目标指定将数据复制在何处。这里面服务器名称可以服务器名也可以网络ip。使用SqlServer身份验证,选择目标数据库--复制一个或者多个表视图的数据。
四、选择导入到目标表或者导入新建表。执行--完成。
2024-10-31 08:00:23
我们用的SSIS包,
要让SQL2008及以上能显示OFFICE2007的文件选项,先在SQL服务器上装上office2007的组件,
AccessDatabaseEngine_2010_x64.exe AccessDatabaseEngine_2007_x86.exe
在SQL中创建一个SSIS包,将Access文件名,SQL语句(新增表,删除表),设为一个变量,可传参数。(SQL与access一起工作时,主要就是不能判断表是否存在),所以,直接删除(不存在会报错,直接忽略就是),然后再创建表。(这个包,附件上了)
SQL导数据时,直接调用 SSIS包导数据就好了,这时就可以自己写存储过程了。
具体,可能较麻烦,特别如果你没做过SSIS包。
下面是部分存储过程,因是客户的资料,只能共享部分给你了,
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
以上是创建一个视图,用来获得表中的字段的,因,我们有部分表只要导出部分字段
以下是导数据的存储过程中的部分代码
--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
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
2024-10-31 08:30:51