[英]Python SQL Server - Create Table from Values from an existing Table
i'm looking for a solution how to create a table from this data (which is located on a table in a sql database with the name "table1") with python or sql我正在寻找一种解决方案,如何使用 python 或 sql 从此数据(位于 sql 数据库中名为“table1”的表上)创建一个表
tablename表名 | column柱子 | datatype数据类型 | length长度 |
---|---|---|---|
a一个 | 1 1 | varchar varchar | 5 5 |
a一个 | 2 2 | date日期 | 0 0 |
a一个 | 3 3 | float漂浮 | 0 0 |
b b | 1 1 | varchar varchar | 10 10 |
b b | 2 2 | varchar varchar | 8 8 |
b b | 3 3 | float漂浮 | 0 0 |
b b | 4 4 | varchar varchar | 50 50 |
c C | 1 1 | date日期 | 0 0 |
c C | 2 2 | varchar varchar | 6 6 |
goal is to create tables (a,b,c)目标是创建表(a,b,c)
their columns and their datatype can also be found in the same table它们的列和它们的数据类型也可以在同一个表中找到
the tricky part is, that the values of "table1" will always be different(dynamic tablenames, columnnames, datatype and length), so i need to write a code, that can reference the values in "table1" and create all tables with their columns (+datatype) found in "table1"棘手的部分是,“table1”的值总是不同的(动态表名、列名、数据类型和长度),所以我需要编写一个代码,它可以引用“table1”中的值并使用它们创建所有表在“table1”中找到的列(+数据类型)
i got this already我已经知道了
DECLARE @n INT = (SELECT COUNT(DISTINCT TABNAME) FROM dbo.Tablenames),
@i INT = '1',
@query VARCHAR(4000)
WHILE @n >= @i
BEGIN
DECLARE @tablename VARCHAR(255) = (Select Top 1 TABNAME FROM
dbo.Tablenames),
@columnname VARCHAR(255), --not properly declared
@datatype VARCHAR(255), --not properly declared
@length VARCHAR(255) --not properly declared
SELECT TOP 1 @tablename
FROM dbo.Tablenames
SET @query = N'CREATE TABLE' + QUOTENAME(@tablename) +
'(' +
@columnname + @datatype + '(' + @length + ')' --this part needs if statement (if not varchar = no '+ '(' + @length + ')''
+ ')'
EXEC (@query)
SET @i+=1
DELETE FROM dbo.Tablenames
WHERE TABNAME = @tableName
END
thanks in advance提前致谢
You can use dynamic SQL for this.您可以为此使用动态 SQL。
You simply aggregate the whole thing using STRING_AGG
.您只需使用STRING_AGG
聚合整个内容。 You need two levels of aggregation, once for the columns, then again for the tables.您需要两个级别的聚合,一次用于列,然后再次用于表。 This gives you one big script you can execute.这为您提供了一个可以执行的大脚本。
DECLARE @sql nvarchar(max) = (
SELECT STRING_AGG(CONCAT(
'CREATE TABLE ',
QUOTENAME(t1.tablename),
' (
',
t1.columns,
'
);'
), '
')
FROM (
SELECT
t1.tablename,
columns = STRING_AGG(CAST(CONCAT(
' ',
QUOTENAME(t1.[column]),
' ',
t1.datatype,
CASE WHEN t1.datatype = 'varchar' THEN CONCAT('(', t1.length, ')') END
) AS nvarchar(max)), ',
')
FROM table1 t1
GROUP BY
t1.tablename
) t1
);
PRINT @sql;
EXEC sp_executesql @sql;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.