所以,我正在制作一个“时间表”表。对于该程序在大学环境中创建的每个计划,我需要一个新表。所以,我需要一个SPRING2015,FALL2015等。这就是我想要的表格名称。我们将时间表输入到基本SCHEDULE表中。存储过程必须以“FALL2015”表示,并将表格设为“FALL2015”。我还没有找到一个很好的方法来做到这一点。我似乎只能创建一个临时表或具有静态名称的表。我们需要从SCHEDULE表复制到在同一过程中制作的'FALL2015'表中的所有内容。那不是问题。我只需要找到将变量传入表名的过程。我似乎无法找到一个好方法。
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
答案 0 :(得分:2)
不知道为什么要创建这么多具有相同模式的表的原因,我通常会在表中添加一列来标记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