[英]create SQL table from existing table using pyodbc/turbodc in python
[英]Python SQL Server - Create Table from Values from an existing Table
我正在尋找一種解決方案,如何使用 python 或 sql 從此數據(位於 sql 數據庫中名為“table1”的表上)創建一個表
表名 | 柱子 | 數據類型 | 長度 |
---|---|---|---|
一個 | 1 | varchar | 5 |
一個 | 2 | 日期 | 0 |
一個 | 3 | 漂浮 | 0 |
b | 1 | varchar | 10 |
b | 2 | varchar | 8 |
b | 3 | 漂浮 | 0 |
b | 4 | varchar | 50 |
C | 1 | 日期 | 0 |
C | 2 | varchar | 6 |
目標是創建表(a,b,c)
它們的列和它們的數據類型也可以在同一個表中找到
棘手的部分是,“table1”的值總是不同的(動態表名、列名、數據類型和長度),所以我需要編寫一個代碼,它可以引用“table1”中的值並使用它們創建所有表在“table1”中找到的列(+數據類型)
我已經知道了
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
提前致謝
您可以為此使用動態 SQL。
您只需使用STRING_AGG
聚合整個內容。 您需要兩個級別的聚合,一次用於列,然后再次用於表。 這為您提供了一個可以執行的大腳本。
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.