从存储过程中传入的参数创建 Table

Create a Table from a Passed In Parameter in a Stored Procedure

所以,我正在努力 "schedule" table。我需要为该程序在大学环境中创建的每个计划创建一个新的 table。所以,我需要一个用于 SPRING2015、FALL2015 等的。例如,这就是我想要的 tables 名称。我们有一个计划被输入到基本计划 table 中。存储过程必须 table 说 'FALL2015' 并使 table 调用 'FALL2015'。我还没有找到一个好的方法来做到这一点。我似乎只能制作一个临时的 table 或带有静态名称的 table。我们需要从 SCHEDULE table 复制到在同一过程中制作的 'FALL2015' table 的所有内容。那不是问题所在。我只需要找到将变量传递给过程的方法,即 table 名称。我似乎找不到好的方法。

CREATE PROCEDURE CreateScheduleTable 
    @TableName VARCHAR(255)
AS
BEGIN

CREATE TABLE @TableName (
    ClassID INT,
    SectionNum VARCHAR(2) NOT NULL,
    StartTime INT,
    EndTime INT,
    Mon BIT,
    Tues BIT,
    Wed BIT,
    Thurs BIT,
    Fri BIT,
    Sat BIT,
    Sun BIT,
    TeacherID VARCHAR(6),
    RoomID INT,
    CONSTRAINT pk_Class PRIMARY KEY (ClassID, SectionNum)
)

    INSERT INTO @TableName
    (ClassID, SectionNum, StartTime, EndTime, Mon, Tues, Wed, Thurs, Fri, Sat, Sun, TeacherID)
    SELECT ClassID, SectionNum, StartTime, EndTime, Mon, Tues, Wed, Thurs, Fri, Sat, Sun, TeacherID
    FROM SCHEDULE


END
GO
-- End Procedure CreateScheduleTable --

EXEC CreateScheduleTable 'Hi'

SELECT * FROM #TempSchedule

不知道为什么要创建这么多具有​​相同架构的 table,我通常会在 table 中添加一列以标记 SPRING2015, FALL2015,.... etc 的记录 .. ..

无论如何你会通过使用动态 sql 来做到这一点,就像这样....

CREATE PROCEDURE CreateScheduleTable 
    @TableName SYSNAME
AS
BEGIN
 SET NOCOUNT ON;
DECLARE @SQL NVARCHAR(MAX); 

DECLARE @ConstraintName SYSNAME = @TableName + 'pk_Class'

SET @SQL = N' CREATE TABLE ' + QUOTENAME(@TableName) 
         + N' ( ClassID INT,
                SectionNum VARCHAR(2) NOT NULL,
                StartTime INT,
                EndTime INT,
                Mon BIT,
                Tues BIT,
                Wed BIT,
                Thurs BIT,
                Fri BIT,
                Sat BIT,
                Sun BIT,
                TeacherID VARCHAR(6),
                RoomID INT,
                CONSTRAINT '+ QUOTENAME(@ConstraintName) 
          + N' PRIMARY KEY (ClassID, SectionNum) )'

 Exec sp_executesql @SQL

 SET @SQL = N' INSERT INTO '+ QUOTENAME(@TableName) + N'
            (ClassID, SectionNum, StartTime, EndTime, Mon, Tues, Wed, Thurs, Fri, Sat, Sun, TeacherID)
             SELECT ClassID, SectionNum, StartTime, EndTime, Mon, Tues, Wed, Thurs, Fri, Sat, Sun, TeacherID
            FROM SCHEDULE'

   Exec sp_executesql @SQL

END
GO