我正在运行 SQL Server 2005。我想创建一个存储过程,该过程将创建一个名为 table1 的表,并使用传递的逗号分隔值列表,将该列表中的每个元素用作列名。
所以基本上它就像 sp_procedurename(col1,col2,col3)
将创建包含 col1、col2 和 col3 列的 table1(如果它们都可以是 varchar(max),那也很棒。
我正在运行 SQL Server 2005。我想创建一个存储过程,该过程将创建一个名为 table1 的表,并使用传递的逗号分隔值列表,将该列表中的每个元素用作列名。
所以基本上它就像 sp_procedurename(col1,col2,col3)
将创建包含 col1、col2 和 col3 列的 table1(如果它们都可以是 varchar(max),那也很棒。
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 注入。如果此逗号分隔的列名列表由用户键入,请格外小心。