2011-09-29 40 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 

你可能想切換這些語句的順序,所以你不要查詢可能不存在的表格。

相關問題