簡體   English   中英

Python SQL Server - 從現有表中的值創建表

[英]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;

db<>小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM