根据sql中表的行值创建表

时间:2016-03-21 17:50:41

标签: sql sql-server sql-server-2008 sql-server-2012

我的要求是这样的事情

我有一个表tblDetails,其中包含有关表的所有详细信息

TblCol TblName ColNo ColName Type Length Sacle KeyType description

现在基于tblDetails中的值,我想创建表。

1 个答案:

答案 0 :(得分:1)

以下是如何处理这种动态SQL的(非常)基本示例。此示例不添加索引,键或任何花哨的东西 - 只是一些具有数据类型的表和列,但它应该让您从正确的方向开始:

DECLARE @sql NVARCHAR(MAX)
DECLARE @tblName nvarchar(255)

DECLARE tbl_cursor CURSOR LOCAL FOR
    SELECT DISTINCT tblName 
    FROM tblDetails
    ORDER BY tblName

OPEN tbl_cursor 
FETCH NEXT FROM tbl_cursor INTO @tblName

--OUTER LOOP THROUGH TABLES:
WHILE @@FETCH_STATUS = 0   
BEGIN   
    SET @sql = 'CREATE TABLE ' + @tblName + '( ';

    DECLARE @colName nvarchar(255),
            @type nvarchar(50),
            @length nvarchar(50),
            @ctr int = 0;

    DECLARE col_cursor CURSOR LOCAL FOR
        SELECT [colName], [Type], [Length]
        FROM tblDetails
        WHERE tblName = @tblName
        ORDER BY ColNo
    OPEN col_cursor
    FETCH NEXT FROM col_cursor INTO @colName, @type, @length
    --INNER LOOP THROUGH COLUMNS   
    WHILE @@FETCH_STATUS = 0    
    BEGIN
        IF @ctr != 0 --if this is not the first column, prefix w/ comma
            SET @sql += ', ';

        SET @sql += '[' + @colName + '] ' + @type;

        IF @type IN ('CHAR','VARCHAR','NCHAR','NVARCHAR','BINARY','VARBINARY') --add size if appropriate
            SET @sql += '(' + @length + ')'

        SET @ctr += 1;
        FETCH NEXT FROM col_cursor INTO @colName, @type, @length
    END --inner loop

    CLOSE col_cursor

    SET @sql += ')';
    EXECUTE sp_executesql @sql

    FETCH NEXT FROM tbl_cursor INTO @tblName   
END --outer loop   

CLOSE tbl_cursor