使用逗号分隔的列名列表创建表的存储过程

时间:2013-10-11 17:15:35

标签: sql sql-server-2005

我正在运行SQL Server 2005。 我想创建一个存储过程,该过程将创建一个名为table1的表,并使用逗号分隔值的传递列表,使用该列表中的每个元素作为列名。

所以基本上它就像sp_procedurename(col1,col2,col3)

将创建包含col1,col2和col3列的table1 (如果它们都可以是varchar(max),那也很棒。

1 个答案:

答案 0 :(得分:1)

CREATE PROCEDURE dbo.whatever -- do not use sp_ prefix!
  @tablename SYSNAME,
  @column_list VARCHAR(MAX)
AS
BEGIN
  SET NOCOUNT ON;

  DECLARE @sql NVARCHAR(MAX);

  SET @sql = N'CREATE TABLE dbo.' + QUOTENAME(@tablename) + '
    (
      [' + REPLACE(@column_list, ',', '] VARCHAR(MAX),
      [')
      + '] VARCHAR(MAX)
    );';

  EXEC sp_executesql @sql;
END
GO

这不执行任何错误处理,例如@tablename已经存在,也没有做任何事情来保护您免受SQL注入。如果用户输入了以逗号分隔的列名列表,请务必小心谨慎。

哦和here's why you shouldn't use the sp_ prefix for stored procedures