Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 表已存在于新的SQL Server数据库中_Sql Server_Sqlcmd - Fatal编程技术网

Sql server 表已存在于新的SQL Server数据库中

Sql server 表已存在于新的SQL Server数据库中,sql-server,sqlcmd,Sql Server,Sqlcmd,我正在编写一个脚本来在SQLServer中创建一组表。在编写脚本时,我希望创建和删除数据库。问题是,我得到一个错误,表示该对象已经存在 下面是我的示例脚本 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 na

我正在编写一个脚本来在SQLServer中创建一组表。在编写脚本时,我希望创建和删除数据库。问题是,我得到一个错误,表示该对象已经存在

下面是我的示例脚本

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                                                                                                                      
错误:

Msg 2714,16级,状态6,服务器橙色,第22行
数据库中已存在名为“stuff”的对象


我在LinuxMint机器上运行它,这是一台新安装的SQL Server,我使用
sqlcmd
。我想我可以在创建表之前放置一个
drop/delete
命令,但这不应该发生在一开始。这是怎么回事

在对象存在性检查中绑定CREATETABLE语句。像这样

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

当您从动态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);
';