从存储过程中传入的参数创建 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
所以,我正在努力 "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