SQL محمول لتحديد ما إذا كان وجود جدول أم لا؟

StackOverflow https://stackoverflow.com/questions/1227921

  •  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

والحفاظ على الاستعلام بسيطا قدر الإمكان لمنع أخطاء أخرى محتملة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top