PDA

View Full Version : Kiểm tra sự tồn tại của 1 table trong CSDL



Nheo
08-08-2004, 01:09
Làm sao kiểm tra sự tồn tại của 1 table trong CSDL bằng SQL hả các bác?
Em đã thử dùng như vầy: "select * from user_tables where ten table can kiem tra" nhưng vẫn không được.Có cách truy vấn nào khác không nhỉ?(Em dùng CSDL là Oracle)

greenstarvn03
08-08-2004, 01:22
"select * from user_tables where ten table can kiem tra" Câu lệnh này hình như sai cú pháp của câu lênh Select cú pháp của nó như sau:
Select phạm vi From Cơ sở dữ liệu Where điều kiện
như vậy câu truy vấn của bạn không có phần điều kiện thì câu lênh truy vấn sẽ chỉ trả về giá trị null.

Nheo
08-08-2004, 01:31
không phải đâu, select * là chọn tất cả các fields trong table, co`n user_tables là table chứa tên các table trong CSDL.
Pha`n điều kiện của mình là chọn ra cái table cần kiểm tra, cú pháp hoàn toàn đúng, vì mình đã thử ròi, chỉ có điều là table "user_tables" không chứa các tên của table trong CSDL nên mình không select ra được thôi.

KIRIMARU
10-08-2004, 03:09
To Nheo: Thực ra, để kiểm tra sự tồn tại của 1 table trong CSDL là rất dễ. Nếu bạn dùng SQL Navigator, bạn có thể tìm thấy table của bạn ở My Schema/Tables. Hoặc bạn chỉ cần dùng câu lệnh "Select * from tên_table_cần_tìm". Nếu table bạn cần tìm tồn tại thì câu lệnh này sẽ cho thấy toàn bộ các fields của nó, còn nếu không có thì SQL Navigator sẽ báo lỗi là table này không tồn tại.

Nheo
10-08-2004, 05:09
bạn không hiểu ý mình rồi, trong lập trình, mình cần kiểm tra sự tồn tại của 1 table được nhập vào trong 1 textbox.Ví dụ như kiểm tra table có tên "test", nếu không có thì sẽ báo 1 lỗi là "không tìm thấy table này trong CSDL" còn nếu có, thì sẽ thực hiện 1 câu lệnh khác...

andes
11-08-2004, 01:02
Mình vẫn dùng là
SELECT * from USER_TABLES WHERE TABLE_NAME = UPPER(<tên bảng>);
hoặc là
SELECT 'a' FROM USER_TABLES WHERE EXIST (TABLE_NAME = UPPER(<tên bảng>); nếu tồn tại thì nó trả về chữ a, nếu ko thì trả về NULL.

Nheo
13-08-2004, 04:02
OK,nhưng trong user_tables của mi`nh lại không chứa tên tất cả các table bạn ơi.Còn UPPER chỉ là làm cho kí tự thường thành HOA thôi.

oj_n
13-08-2004, 15:45
--1=found; 0=not found
select found=isnull((select 1 from user_tables where table_name='test'),0)

--or
if exists(select 1 from user_tables where table_name='test')
print('test is found.')
else
print('test is not found.')

sandman
21-08-2004, 06:07
Dùng lệnh Desc table_name ấy,có hay không cái table thì biết ngày

PTBT
24-08-2004, 00:53
user_tables là gì vậy bạn? là từ khóa hả?

greenhill
06-09-2004, 08:33
Chào bạn
bạn có thể sử dụng 2 cách
1. Sử dụng các table system để tìm :
sysobjects : Các table,view,store,functions...
syscolumns : Các cột ...
systypes : các kiểu ...
....

đại khái như sau :
liệt kê danh sách tất cả các Bảng :
select * from sysobjects where xtype='U'
tương tự :
U=Table
V=View
P=Store Proc
F=Function
...


vậy bạn phải làm như sau :
if( exists(select * from sysobjects where xtype='U' and name='tablename' ))
print 'true'
else
print 'false'

2. Bạn có thể sử dụng INFORMATION_SCHEMA để thực hiện việc này dễ hơn ( thực chất là chúng cũng lấy từ sysobjects )

if( exists(select * from INFORMATION_SCHEMA.TABLES where table_name='tablename'))
print 'true'
else
print 'false'


tất cả các dạng của chúng như sau :
INFORMATION_SCHEMA.


CHECK_CONSTRAINTS
COLUMN_DOMAIN_USAGE
COLUMN_PRIVILEGES
COLUMNS
CONSTRAINT_COLUMN_USAGE
CONSTRAINT_TABLE_USAGE
DOMAIN_CONSTRAINTS
DOMAINS
KEY_COLUMN_USAGE
PARAMETERS
REFERENTIAL_CONSTRAINTS
ROUTINES
ROUTINE_COLUMNS
SCHEMATA
TABLE_CONSTRAINTS
TABLE_PRIVILEGES
TABLES
VIEW_COLUMN_USAGE
VIEW_TABLE_USAGE
VIEWS


bạn hãy mở SQL Server Book online vào mục index gõ vào :
Information Schema Views
bạn sẽ thú vị với tất cả những gì ở đây

tạm biệt bạn

Nheo
07-09-2004, 02:36
rất cám ơn các bạn đã chỉ giúp, vì mình dùng Delphi để lập trình, nên mình có cách kiểm tra khác tiện hơn. Đó là dùng table của Delphi để kiểm tra luôn,(dùng thuộc tính table.exist)
Cách các bạn chỉ đều dùng được (cho mọi môi trường làm việc),nhưng việc áp dụng hơi khó khăn.
To PTBT: user_tables là 1 table có chứa tên của các table khác.
Thank all.

rookie007
22-11-2008, 10:54
Vì mình dùng Delphi để lập trình, nên mình có cách kiểm tra khác tiện hơn. Đó là dùng table của Delphi để kiểm tra luôn,(dùng thuộc tính table.exist)

Bạn có thể nói rõ hơn về cách dùng này ko! Thanks nhiều:)