2011-09-29 49 views
0

我有两个不同的事情一次发生..基本上我需要在表中插入两个新的记录,如果他们不在那里...和肯定他们将始终有相同的ID和名称(我这样做),但之后立即我需要检查一个表是否存在,如果它不创建它..(但如果它确实存在,我不想放弃它只是让它一个人)。查询更新行,然后创建一个表,如果它不存在

请参阅下面的代码..你可以帮助我检查表的存在与否吗?如果你看到改进的余地请不要..

谢谢

--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

--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 

回答

1

按我的知识,如果不存在,则检查该表是否存在,并在插入之前先创建它。希望下面的查询可能对你有用。

 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列是标识字段,因此试图插入的值将失败。

0

用于插入记录清洁脚本是:

IF NOT EXISTS (SELECT 1 FROM myTable WHERE ...) 
BEGIN 
    -- Insert record 
END 

和检查,如果一个表存在: Check if table exists in SQL Server

IF (NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'TheSchema' AND TABLE_NAME = 'TheTable')) 
BEGIN 
    -- Insert table 
END 

你可能想切换这些语句的顺序,所以你不要查询可能不存在的表格。

相关问题