簡體   English   中英

刪除/創建表(SQL-過程)

[英]Drop/Create Table (SQL - Procedure)

我正在嘗試創建一個非常簡單的過程(使用簡單的代碼-我是一個初學者,我想讓代碼盡可能簡單),該過程可以刪除名為“ Table1”的表並創建名為“ Students”的表包含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

您是否有意使用動態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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM