簡體   English   中英

該表已存在於新的SQL Server數據庫中

[英]Table already exists in a new SQL Server database

我正在編寫腳本以在SQL Server中創建一堆表。 在編寫腳本時,我想創建和刪除數據庫。 問題是我收到一條錯誤消息,指出該對象已存在。

這是我的示例腳本

DECLARE @db_name varchar(20);
DECLARE @command varchar(100);
SET @db_name='testdb';

SET @command='DROP DATABASE ' + @db_name
IF EXISTS(SELECT * FROM sys.databases WHERE name=@db_name)
    exec(@command)

SET @command='CREATE DATABASE ' + @db_name
EXEC(@command)

--listing databaes
SELECT name from master.dbo.sysdatabases
-- using our database
SET @command='USE ' + @db_name
EXEC(@command)

PRINT 'listing tables'
SET @command = 'SELECT table_name FROM ' + @db_name + '.INFORMATION_SCHEMA.TABLES WHERE table_type = "base TABLE"'
EXEC(@command)
CREATE TABLE stuff(
    name VARCHAR(30) PRIMARY KEY NOT NULL,
    weight INT,
    quantity INT)

我得到的輸出是

name                                                                                                                            
------------    
master                                                                                                                          
tempdb                                                                                                                          
model                                                                                                                           
msdb                                                                                                                            
testdb                                                                                                                          
SW 

(6 rows affected)
listing tables
table_name                                                                                                                      

錯誤:

消息2714,級別16,狀態6,服務器橙色,第22行
數據庫中已經有一個名為“ stuff”的對象。

我在Linux薄荷機,新安裝的SQL Server上運行此程序,並使用sqlcmd 我想我可以在創建表之前放置一個drop/delete命令,但這並不是剛開始的。 這里發生了什么?

當您從動態SQL執行USE語句時,當執行的批處理完成時,數據庫上下文將恢復為原始數據庫上下文(master?)。 您需要將USE添加到CREATE TABLE腳本中,並使用動態SQL來執行它:

SET @command = N'USE' + QUOTENAME(@db_name) + N';
CREATE TABLE stuff(
    name VARCHAR(30) PRIMARY KEY NOT NULL,
    weight INT,
    quantity INT);
';

將create table語句綁定到對象存在檢查中。 像這樣

IF OBJECT_ID('stuff') IS NULL
BEGIN

CREATE TABLE stuff(
    name VARCHAR(30) PRIMARY KEY--NOT NULL is not needed as the primary key does not allow NULL,
    weight INT,
    quantity INT)

END

暫無
暫無

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

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