从Excel工作表

时间:2015-07-23 15:29:52

标签: sql-server database excel

我的Excel工作表包含我的表定义,如下所示:

FieldName         FieldType
Id                Int
Name              Text

每张表代表一个不同的表,我有大约20个表,总共有800个字段。我需要以最快的方式在我的数据库中创建这些表。我想到的唯一解决方案是:
1-手动逐一创建它们 2-将Excel工作表字段定义复制并复制到SQL管理工作室,并为每个字段添加/调整必要的语法,以便创建表格"查询。

我发现这两个解决方案都很耗时,有没有办法从Excel工作表直接导入表定义?

1 个答案:

答案 0 :(得分:0)

有几种方法可以在Excel中构建表定义。通过VB脚本/宏和/或Excel公式。 VB脚本将提供更强大的解决方案的机会,但可能更多涉及。但是,公式可以快速完成大部分工作。

我和公式一起举了一个例子。在您的问题中,您将显示字段名称和字段类型。为可变长度字符串字段和数字字段添加字段宽度和精度会很有帮助。您还提到您正在使用SQL Server。在这种情况下,我会在电子表格中使用实际的SQL Server字段类型。例如,使用" VARCHAR"而不是" TEXT"。以下是一个例子:

 |A          |B        |C         |D        |E                          |F
--------------------------------------------------------------------------
1|FieldName  |FieldType|FieldWidth|Precision|                           |
2|           |         |          |         |CREATE TABLE table1 (      |Typed Text
3|Id         |Int      |          |         |Id Int ,                   |Formula
4|Name       |Varchar  |30        |         |Name Varchar( 30 ),        |Formula
5|DateOfBirth|Date     |          |         |DateOfBirth Date ,         |Formula
6|HoursWorked|Numeric  |5         |2        |HoursWorked Numeric( 5, 2),|Formula
7|           |         |          |         |)                          |Typed Text
8|           |         |          |         |go                         |Typed Text

Snapshot of table creation Excel worksheet

在示例中,E列第2行到第8行包含生成的SQL脚本。此外,E列,第2行只是作为文本直接输入。列E行7和行8的情况也是如此。

对于E栏第3行至第6行,输入了一个公式。

列E行3中的公式如下:

=IF(ISNUMBER(D3),TRIM(CONCATENATE(A3," ",B3,"( ",C3,", ",D3,"),")),IF(ISNUMBER(C3),TRIM(CONCATENATE(A3," ",B3,"( ",C3," ",D3,"),")),TRIM(CONCATENATE(A3," ",B3," ",C3," ",D3,","))))

该公式一旦粘贴到E列第3行,就可以通过第6行向下复制。

然后可以将E列第2行到第8行中的结果复制并粘贴到SQL Server Management Studio中以创建table1。

注意:一旦脚本在Management Studio中,请删除","在最后一个字段定义中。它只是因为Excel公式不够强大而不能显示它。