我想创建存储过程,它创建了我的新表,但问题是表名和列(列的数量和数据类型)是动态的。
因此,该过程应该采用两个参数: 表名和列列表(在此列表中是列和数据类型的名称)
有没有办法做这样的事情?
答案 0 :(得分:1)
您可以像这样创建动态SQL。
对于发送列表,您需要创建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