删除/创建表(SQL - 过程)

时间:2014-06-19 13:43:39

标签: sql procedure

我正在尝试创建一个非常简单的过程(使用简单的代码 - 我是初学者,我希望保持我的代码尽可能简单),这可以删除名为“Table1”的表并创建一个名为table的表“学生”包含3列:ID,名称,标记

这是我的代码,根本不起作用:

CREATE PROCEDURE Drop_Create
@Table1 VARCHAR(MAX),
@Students VARCHAR(MAX)
AS
BEGIN
    DECLARE @SQL VARCHAR(MAX);
    SELECT @SQL = 'CREATE TABLE ' + @Students + '('SELECT @SQL = @SQL + '[ID] [int] IDENTITY(1,1) NOT NULL,[Name] [NVARCHAR(50)] NOT NULL,[Mark] [INT])';
    SET @SQL = 'IF EXISTS DROP TABLE [' + @Table1 + ']'
    PRINT @SQL;
    EXEC @SQL;
END
GO

1 个答案:

答案 0 :(得分:0)

您是否故意使用动态SQL?如果表名是静态的,则表示接近。否则:

问题1,你的存在是完全错误的。

问题2,你在不执行第一个任务的情况下覆盖@SQL

问题3,[Varchar(50)]

附近有方括号

即使您现在拥有它,它也会在第二次运行时中断(它会尝试再次创建@Students)。我怀疑你以某种方式混淆了自己的逻辑。

CREATE PROCEDURE Drop_Create
@Table1 VARCHAR(MAX),
@Students VARCHAR(MAX)
AS
BEGIN
    -- Drop @table1
    DECLARE @SQL VARCHAR(MAX) = 'IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''' + @Table1 + ''') AND type in (N''U'')) DROP TABLE [' + @Table1 + ']'
    PRINT @SQL;
    EXEC (@SQL);

    -- Create @Students
    SET @SQL = 'CREATE TABLE ' + @Students + '('
    SET @SQL = @SQL + '[ID] [int] IDENTITY(1,1) NOT NULL,[Name] NVARCHAR(50) NOT NULL,[Mark] [INT])';

    PRINT @SQL;
    EXEC (@SQL);
END
GO