0

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

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

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

4

1 回答 1

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 注入。如果此逗号分隔的列名列表由用户键入,请格外小心。

哦,这就是为什么你不应该sp_为存储过程使用前缀

于 2013-10-11T17:23:29.707 回答