首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于更新行的查询,如果表不存在,则创建该表

用于更新行的查询,如果表不存在,则创建该表
EN

Stack Overflow用户
提问于 2011-09-29 22:41:41
回答 2查看 210关注 0票数 0

我有两个不同的事情要同时发生。基本上我需要在一个表中插入两个新的记录,如果它们还没有的话……可以肯定的是,它们将始终具有相同的ID和名称(我这样做了),但在此之后,我需要立即检查是否存在一个表,以及它是否没有创建它。(但如果它确实存在,我不想放弃它,就让它自己去吧)。

请参阅下面的代码。你能帮我检查一下桌子有没有存在吗?如果你看到一间正在改进的房间,请照办..

谢谢

代码语言:javascript
复制
--ADD LOCKS
BEGIN TRAN
IF EXISTS (SELECT myID, myName 
           FROM myTable
           WHERE myID = 7 AND myName = 'Pedro') 
               SELECT 1 
ELSE
      INSERT INTO myTable (myID , myName) values ( 7, 'Pedro')    

IF EXISTS (SELECT myID, myName 
           FROM myTable
           WHERE myID = 8 AND myName = 'Joseph') 
               SELECT 1 
ELSE
      INSERT INTO myTable (myID , myName) values ( 8, 'Joseph')    
COMMIT

--NOW BELOW I WANT TO DO THE CREATION OF A TABLE IF IT DOES NOT EXIST

不确定如何检查它..但知道如何创建IT

代码语言:javascript
复制
--IF TABLE DOES NOT EXIST DO THE FOLLOWING
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[myTable](
    [myID] [int] IDENTITY(1,1) NOT NULL,
    [Name] [varchar(MAX)] NOT NULL
 CONSTRAINT [PK_myTable] PRIMARY KEY CLUSTERED 
(
    [myID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

--ELSE DONT DO NOTHING
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-29 22:53:46

据我所知,您必须先检查表是否存在,如果表不存在,则在插入之前创建它。希望下面的查询能对你有所帮助。

代码语言:javascript
复制
     IF NOT EXISTS (SELECT * FROM SYSOBJECTS WHERE ID = OBJECT_ID(N'[dbo].[myTable]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)
     BEGIN
CREATE TABLE [dbo].[myTable]
(     
    [myID] [int] IDENTITY(1,1) NOT NULL,     
    [Name] [varchar(MAX)] NOT NULL  
    CONSTRAINT [PK_myTable] PRIMARY KEY CLUSTERED  
    (     [myID] ASC 
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON
) ON [PRIMARY] ) ON [PRIMARY] 
    END

    IF NOT EXISTS (SELECT myID, myName  FROM myTable WHERE myID = 7 AND myName = 'Pedro')  
    BEGIN  
           INSERT INTO myTable (myID , myName) values ( 7, 'Pedro')    
   END  

   IF NOT EXISTS (SELECT myID, myName  FROM myTable WHERE myID = 8 AND myName = 'Joseph')  
    BEGIN  
        INSERT INTO myTable (myID , myName) values ( 8, 'Joseph')    
    END 

编辑:还应该注意,如果不打开IDENTITY_INSERT,这将不起作用。因为myID列是一个标识字段,所以尝试插入的值将失败。

票数 1
EN

Stack Overflow用户

发布于 2011-09-29 23:00:22

用于插入记录的清理器脚本为:

代码语言:javascript
复制
IF NOT EXISTS (SELECT 1 FROM myTable WHERE ...)
BEGIN
    -- Insert record
END

并用于检查表是否存在:Check if table exists in SQL Server

代码语言:javascript
复制
IF (NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'TheSchema' AND  TABLE_NAME = 'TheTable'))
BEGIN
    -- Insert table
END

您可能希望更改这些语句的顺序,这样就不会查询可能不存在的表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7599042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档