我的要求是这样的事情
我有一个表tblDetails,其中包含有关表的所有详细信息
TblCol TblName ColNo ColName Type Length Sacle KeyType description
现在基于tblDetails中的值,我想创建表。
答案 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