【问题标题】:How to programmatically create MS Access table in SQL Server using SSIS?如何使用 SSIS 在 SQL Server 中以编程方式创建 MS Access 表?
【发布时间】:2024-01-18 06:08:01
【问题描述】:

我在 ACCESS 数据库中收到发送给我的 SQL 数据库的每月数据更新,大约有 30 个表遵循这种模式,最大的表包含大约 40,000 行。

CREATE TABLE [dbo].[TABLE_NAME_HERE] (
[title] nvarchar (255) NULL, 
[classification1] nvarchar (255) NULL, 
[classification2] nvarchar (255) NULL, 
[1986] float NULL, 
[1987] float NULL, 
[1988] float NULL, 
[1989] float NULL, 
[1990] float NULL, 
[1991] float NULL, 
[1992] float NULL, 
[1993] float NULL, 
[1994] float NULL, 
[1995] float NULL, 
[1996] float NULL, 
[1997] float NULL, 
[1998] float NULL, 
[1999] float NULL, 
[2000] float NULL, 
[2001] float NULL, 
[2002] float NULL, 
[2003] float NULL, 
[2004] float NULL, 
[2005] float NULL, 
[2006] float NULL, 
[2007] float NULL, 
[2008] float NULL, 
[2009] float NULL, 
[2010] float NULL, 
[2011] float NULL, 
[2012] float NULL, 
[2013] float NULL, 
[2014] float NULL, 
[2015] float NULL, 
[2016] float NULL, 
[2017] float NULL, 
[2018] float NULL, 
[2019] float NULL, 
[2020] float NULL, 
[2021] float NULL, 
[2022] float NULL, 
[2023] float NULL, 
[2024] float NULL, 
[2025] float NULL)

我们目前有一个上传这些表的 DTSX 包,但是每隔一段时间(每年)它们会添加另一列,并且 DTSX 包对列详细信息进行了硬编码。

我们没有时间或预算来重新编程所涉及的应用程序 - 尽管我同意有许多更好的方法来存储这些数据。

我想让 DTSX 包自动删除 SQL 服务器上的表,创建一个与 ACCESS 数据库匹配的表并上传数据。

这可能吗?

【问题讨论】:

    标签: sql-server ms-access ssis


    【解决方案1】:

    是否可以更改表结构?例如,如果您有一个子表,其中有一个名为 Year 的列和另一个名为 Value 的列,则无需逐年添加新列。将数据存储在表行而不是列名中是一种很好的做法。

    例如,也可以在 MS-Acceess VBA 中使用 ADOX 循环访问 Access 表的字段集合,然后在 SQL Server 中创建一个新表。代码类似于in this link,但需要更改才能使用 SQL Server 连接等。

    【讨论】:

    • 没有选项(时间/预算)来更改表结构,这是支持现有应用的情况 - 我只是想在上传时节省几个小时。
    【解决方案2】:

    DTS 中的一个选项是在导入时创建一个新表。但是正如上一篇文章所建议的那样,您应该检查问题原因,通常不需要(并且强烈建议不要)更改表。当有一个新列时,无论如何您都必须更改程序的代码,除非新列完全没用。在这种情况下,只需在导入之前删除该列,就可以了。如果该列有用,那么您将如何使用它而不编写引用它的代码(在表的创建/导入之后)???

    【讨论】:

    • 您能否提供有关此选项的更多详细信息以在导入时创建新表 - 我找不到该选项。
    • 使用了该列-通过动态生成的SQL语句访问大量具有类似结构的表,(用户从菜单中选择他们感兴趣的年份)-顺便说一句-我没有不要写这个我只是在支持一个现有的应用程序,如果我正在编写它,我肯定不会这样构建它。