为每行 SQL 创建表

Posted

技术标签:

【中文标题】为每行 SQL 创建表【英文标题】:Create table for each lines SQL 【发布时间】:2018-01-25 22:52:47 【问题描述】:

我有一个包含几千行的 .txt 文件。在每一行,都有一个表的名称。 例如,这是文本文件的摘录:

大象

香蕉

蓝莓

.......

我想创建标题为狗、猫、大象...的表格

如何实现这一点并将所有表添加到我的数据库中?

感谢您的帮助!

【问题讨论】:

“我所有的表都存储在Adminer中(类似于phpMyAdmin)。” -- 表存储在数据库中。 Adminer 和 phpMyAdmin(以及许多其他)只是用于查看和操作存储在数据库中的数据的工具。 Adminer 或 phpMyAdmin 中没有存储任何内容(除了它们自己的配置,但它们与问题无关)。 好的,但你认为你能帮我解决我的问题吗? 你有没有尝试过?你为什么还要这样做?这肯定不是一个好主意 因为我有很多网站的信息,我希望每个网站都有自己的表格。 使用 Adminer 创建一个表,查看它为创建生成的 SQL 查询(看起来像 CREATE TABLE ...)并使用您喜欢的文本编辑器的搜索和替换功能对每一行重复它在您的文本文件中。 【参考方案1】:

如果所有的表结构都完全相同,那么您可以使用游标和动态 sql 的组合。将文本文件上传到表格后,您可以使用光标循环浏览每个文件。

CREATE TABLE #temp
(TableName NVARCHAR(20))
INSERT INTO #temp
VALUES ('Dog'),('Cat'),('Mouse')

DECLARE @mysql NVARCHAR(MAX);
DECLARE @name NVARCHAR(50);

DECLARE crsr CURSOR FOR
SELECT TableName FROM #temp

OPEN crsr 
FETCH NEXT FROM crsr INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @mySQL = 'CREATE TABLE dbo.' + @name + ' (Col_1 CHAR(10), Col_2 INT)'
    PRINT @mySQL

    EXECUTE (@mySQL)

    FETCH NEXT FROM crsr INTO @name

END 

CLOSE crsr
DEALLOCATE crsr

【讨论】:

以上是关于为每行 SQL 创建表的主要内容,如果未能解决你的问题,请参考以下文章

在plsql中怎样创建表格?

mysql一张表可以创建多少字段

通过获取所有表结果对每行进行分组

将 SQL 表转换为 XML,每行有 2 个节点

sql2000 取出每行数据,并赋值给变量。

创建一个表,每行包含一个与该行数据相关的按钮