SQL محمول لتحديد ما إذا كان وجود جدول أم لا؟
-
22-07-2019 - |
سؤال
هل هناك طريقة المحمولة لتحديد ما إذا كان جدول قاعدة بيانات موجود بالفعل أم لا؟
المحلول
والمحمولة؟ أنا لا أعتقد ذلك.
وربما الأقرب يمكنك الحصول على هو:
select * from <table>
وهذا سيعود خطأ إذا لم يكن موجودا على الطاولة.
نصائح أخرى
وهذا هو محمول كما يحصل للأسف:
select
count(*)
from
information_schema.tables
where
table_name = 'tablename'
and table_schema = 'dbo'
وهذا يعمل بالتأكيد على خادم SQL، MySQL، وبوستجرس. وليس ذلك بكثير على أوراكل، وبالرغم من ذلك. وكنت قد للوصول إلى قاموس البيانات أوراكل لذلك. ومع ذلك، هناك مشروع مفتوح المصدر أن يخلق information_schema
في أوراكل من قاموس البيانات . يمكنك محاولة أن إذا كنت بحاجة إلى قابلية مطلقة.
وP.S.-مخطط ليس من الضروري أن يكون dbo
، ولكن هذا هو الأكثر شيوعا.
وأود أن أقول
وselect 'x' from <table_name> where 0=1;
والعيب هو أنه إذا كنت تحصل على خطأ، وكنت لا أعرف على وجه اليقين ما هو السبب الحقيقي. قد يكون في عداد المفقودين الطاولة أو على سبيل المثال خطأ اتصال. يمكن تحليل رسالة الخطأ، ولكن بالتأكيد لن يكون المحمولة.
وآراء INFORMATION_SCHEMA هي معيار ANSI - حتى تلك التي ينبغي أن تكون معظم الخيار المحمول. لا تنس أن تضيف المخطط والجدول نوع للفقرة حيث الخاص بك ...
if exists(select *
from information_schema.tables
where table_schema = 'dbo'
and table_name = 'MyTable'
and table_type = 'basetable')
begin
-- your code here
end
وهنا هو الشيء الذي هو محمول معقول:
<اقتباس فقرة>والآن تحديد () من الجدول الحد 1؛
اقتباس فقرة>وانها لا تعتمد على معرفة أي عمود معين.
وأنها لا تحمل النفقات العامة التي تعول (*) له في بعض الأحيان.
لا يهم ما إذا كان الجدول فارغ أم لا.
وأنه فشل حالة عدم وجود الجدول.
وبما أن كل DBMS التعريف الخاصة به، وأعتقد أن الطريقة الأكثر "المحمولة" للقيام بذلك يستخدم المتصل التطبيق نفسه. شيء من هذا القبيل
try
execute("select top 1 * from table")
return (true)
catch
return false
ومحاولة الاستعلام عن جدول. إذا فشل الاستعلام - تحصل على خطأ، فإنه لا وجود لها
وربما هذا هو محمول كما يمكنك الحصول عليها. عبء إنتاج النتيجة ثم يعتمد على رمز الاستعلام عن الجدول / قاعدة البيانات.
select top 1 *
from MyTable
والحفاظ على الاستعلام بسيطا قدر الإمكان لمنع أخطاء أخرى محتملة.