如何使用动态列通过存储过程创建表

时间:2016-11-02 09:59:19

标签: sql-server datatable procedure

我想创建存储过程,它创建了我的新表,但问题是表名和列(列的数量和数据类型)是动态的。

因此,该过程应该采用两个参数: 表名和列列表(在此列表中是列和数据类型的名称)

有没有办法做这样的事情?

1 个答案:

答案 0 :(得分:1)

您可以像这样创建动态SQL。

  • 将表名作为参数发送到SP
  • 使用colunName发送DataTable,将DataType发送到SP(用户定义表)

对于发送列表,您需要创建USER DEFINED TABLE

的数据表
CREATE TYPE [dbo].[myColumnDatatyes] AS TABLE(
    columnName [NVARCHAR](200) NULL,
    columnDataType [NVARCHAR](200) NULL
);

然后在SP中使用这个类似于此的UDT,创建游标以循环遍历表并生成动态SQL语句。

Create Procedure sp_CreateDynamicTables(
@tableName nvarchar(150),
@tableSchema [myColumnDatatyes] readonly
)
AS BEGIN
 DECLARE @sql NVARCHAR(MAX);

 set @SQL= N' Create table '+QUOTENAME(@tableName);

 set  @SQL =@SQL+ ' Here loop over @tableSchema to add N Columns '

 EXECUTE sp_executesql  @sql
END