我的Excel工作表包含我的表定义,如下所示:
FieldName FieldType
Id Int
Name Text
每张表代表一个不同的表,我有大约20个表,总共有800个字段。我需要以最快的方式在我的数据库中创建这些表。我想到的唯一解决方案是:
1-手动逐一创建它们
2-将Excel工作表字段定义复制并复制到SQL管理工作室,并为每个字段添加/调整必要的语法,以便创建表格"查询。
我发现这两个解决方案都很耗时,有没有办法从Excel工作表直接导入表定义?
答案 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公式不够强大而不能显示它。