حيث (أو كيف) يجب أن تحدد المخطط في بيان حدد عند استخدام كيو؟

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

سؤال

ولدي تطبيق يبنى عليه ASP.NET 3.5 و 8.3 كيو. قاعدة البيانات الخاصة بي على 3 مستخدمين، وهو صاحب البيانات (XXX-مالك)، محرر البيانات (XXX-المحرر)، وعارض البيانات (XXX-المشاهد). كل مستخدم لديه مخطط الخاصة بهم يسمى XXX-مخطط، XXX-تحرير المخطط والثلاثون المشاهد-المخطط. يتم تخزين كافة البيانات في XXX-المخطط.

وهذا يتطلب أن أحدد المخطط عند الاتصال إلى قاعدة البيانات إما لالثلاثون محرر أو XXX المشاهد المستخدمين كما هو مبين في المقتطف التالي.

NpgsqlCommand pgCommand = new NpgsqlCommand();
pgCommand.CommandText = @"SELECT 
                        bldg_id,
                        bldg_name,
                        bldg_no,
                        FROM " + this.schema + @".buildings
                        WHERE UPPER(bldg_id) LIKE UPPER(@id);";

pgCommand.Parameters.Add("@id", "%" + id + "%");
pgCommand.Connection = pgConnection;

إذا كان لي أن اتبع هذا الطريق وأود أن تحديد المخطط في الملف web.config. ومع ذلك، يجب أن يكون هناك طريقة أفضل لتحديد أي مخطط ينبغي استخدامها. وأود أن تكون قادرة على إزالة سلسلة سلسلة تماما إن أمكن.

ما هو أفضل وسيلة لتحديد مخطط لاستخدامها في بيان SQL؟


تحرير

وفيما يلي من دليل كيو العضو تبدو واعدة.

<اقتباس فقرة>   

وSearchPath - التغييرات مسار البحث إلى المخططات المحددة والعامة

من وجهة نظري اختبار محدود وأنها تعمل على ما يرام في وضعي. ومع ذلك، وهذا هو الحل الوحيد كيو. هناك ربما أكثر قاعدة بيانات حل الملحد، لا قدمت معظم قواعد البيانات هذه الوظيفة؟


تحرير 2

ولقد تميزت الجواب أدناه التي دعتني إلى تغيير ترتيب بحث مخطط على مستوى قاعدة البيانات. مع التغيير التالي ولست بحاجة إلى إضافة رمز في تصريحات SQL بلدي.

ALTER USER xxx-viewer SET search_path TO '$user', xxx, public, sde
هل كانت مفيدة؟

المحلول

ويمكنك تعيين مسار البحث المخطط على أساس لكل جلسة عمل باستخدام:

SET search_path TO myschema

إذا كنت تريد أن يرتد إلى المخطط العام، هل يمكن استخدام:

SET search_path TO myschema, public

نصائح أخرى

ويمكنك أيضا القيام:

وSET المخطط "myschema '؛

وهذا البيان هو نفسه الذي SET search_path TO myschema, public ولكن أكثر

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