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