Bỏ một bảng tạm thời nếu nó tồn tại


96

Tôi có hai dòng mã trong SQL để tạo hai bảng một cách nhanh chóng, tôi cần phải làm điều gì đó như

IF TABLE EXISTS 
    DROP IT AND CREATE IT AGAIN
ELSE
    CREATE IT

dòng của tôi là những dòng sau

CREATE TABLE ##CLIENTS_KEYWORD(client_id int)     
CREATE TABLE ##TEMP_CLIENTS_KEYWORD(client_id int)   

Làm cách nào để áp dụng khái niệm đó cho hai bảng này trong quy trình của tôi?



Câu trả lời:


200

Từ SQL Server 2016, bạn chỉ có thể sử dụng

 DROP TABLE IF EXISTS ##CLIENTS_KEYWORD

Trên các phiên bản trước, bạn có thể sử dụng

IF OBJECT_ID('tempdb..##CLIENTS_KEYWORD', 'U') IS NOT NULL
/*Then it exists*/
DROP TABLE ##CLIENTS_KEYWORD
CREATE TABLE ##CLIENTS_KEYWORD
(
   client_id INT
)

Bạn cũng có thể cân nhắc việc cắt bớt bảng thay vì bỏ và tạo lại.

IF OBJECT_ID('tempdb..##CLIENTS_KEYWORD', 'U') IS NOT NULL
  TRUNCATE TABLE ##CLIENTS_KEYWORD
ELSE
  CREATE TABLE ##CLIENTS_KEYWORD
  (
     client_id INT
  ) 

bạn cũng có thể đăng cắt ngắn bên dưới cách tiếp cận này, nó có thể giúp tôi trở nên tốt hơn :) cảm ơn bạn
user710502

hmm vì một lý do khi tôi thực hiện nó nó nói rằng ## CLIENTS_KEYWORD là một tên đối tượng không hợp lệ
user710502

@user - Bạn đang sử dụng phiên bản SQL Server nào? Tôi đang sử dụng SQL Server 2008 và (nghĩ rằng tôi) đã kiểm tra cả hai trường hợp bảng đã tồn tại và không tồn tại. Nó có thể cần gói tạo ra trong một EXECquá trình phân tích không phàn nàn trên các phiên bản trước đó. tức là sử dụngEXEC('CREATE TABLE ##CLIENTS_KEYWORD(client_id INT)')
Martin Smith,

+1OBJECT_ID IS NULLthay vì tempdb.sys.tablestruy vấn.
dakab

1
@TobySpeight - câu hỏi là về các bảng tạm thời. Hầu hết những điểm này có liên quan hạn chế đến điều đó.
Martin Smith

13

Kiểm tra sự tồn tại bằng cách truy xuất object_id của nó:

if object_id('tempdb..##clients_keyword') is not null
    drop table ##clients_keyword

0

Những gì bạn yêu cầu là:

IF OBJECT_ID('tempdb..##CLIENTS_KEYWORD') IS NOT NULL
    BEGIN
       DROP TABLE ##CLIENTS_KEYWORD

       CREATE TABLE ##CLIENTS_KEYWORD(client_id int)

    END
ELSE
   CREATE TABLE ##CLIENTS_KEYWORD(client_id int) 

IF OBJECT_ID('tempdb..##TEMP_CLIENTS_KEYWORD') IS NOT NULL
    BEGIN
       DROP TABLE ##TEMP_CLIENTS_KEYWORD

       CREATE TABLE ##TEMP_CLIENTS_KEYWORD(client_id int)

    END
ELSE
   CREATE TABLE ##TEMP_CLIENTS_KEYWORD(client_id int) 

Vì bạn luôn tạo bảng, bất kể bảng có bị xóa hay không; một giải pháp tối ưu hóa một chút là:

IF OBJECT_ID('tempdb..##CLIENTS_KEYWORD') IS NOT NULL
   DROP TABLE ##CLIENTS_KEYWORD

CREATE TABLE ##CLIENTS_KEYWORD(client_id int) 

IF OBJECT_ID('tempdb..##TEMP_CLIENTS_KEYWORD') IS NOT NULL
   DROP TABLE ##TEMP_CLIENTS_KEYWORD

CREATE TABLE ##TEMP_CLIENTS_KEYWORD(client_id int) 
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.