حيث (أو كيف) يجب أن تحدد المخطط في بيان حدد عند استخدام كيو؟
-
19-08-2019 - |
سؤال
ولدي تطبيق يبنى عليه 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
ولكن أكثر