تحويل Tsql إلى MS-Access SQL
-
18-09-2019 - |
سؤال
يسمح Tsql (كما هو مستخدم في MS SQL Server 2000 و 2005) بنود مشتركة متعددة، واحدة مباشرة بعد الآخر، لا تحتاج إلى فواصل أو قوسين. جرب هذا في Access وطرق خطأ بناء الجملة (مشغل مفقود) في تعبير الاستعلام ... "
مما كنت قادرا على التجمع في Google-Land، فإن Access SQL يريد قوسين لجماعة جمل الانضمام. معظم النصائح حول كيفية تحقيق ذلك هي استخدام طريقة عرض التصميم أو معالج الاستعلام، والسماح للوصول إلى معرفة مكان وضع الأقواس (التي ليست مطلوبة في SQL القياسية). المشكلة هي، أنا معتاد جدا على القيام ب SQL الخاص بي في محرر نصوص (Notepad، SSMS، VS2005، أيا كان) أن طريقة عرض التصميم والمعالج تحصل على الطريق وجعل بشرتي الزحف. في بعض الأحيان تجعل المعالجات افتراضات سيئة حول ما يجب الانضمام إليه إذا كان هناك إمكانيات متعددة، وأنا معتاد على القيام بذلك بنفسي في TSQL، فأنا أفضل ترك المعالجات منه.
ليست هناك أداة تقوم بتحويل TSQL إلى Access SQL، أو على الأقل مجموعة من القواعد في مكان وضع الأقواس؟
مثال:
SELECT ...
FROM Participant PAR
INNER JOIN Individual IND
ON PAR.APETSID = IND.APETSID
INNER JOIN Ethnicity ETH
ON IND.EthnicityID = ETH.ID
INNER JOIN Education EDU
ON IND.EducationID = EDU.ID
INNER JOIN Marital MAR
ON IND.Marital = MAR.ID
INNER JOIN Participant-Probation PXP
ON PAR.ID = PXP.ParticipantID
INNER JOIN Probation PBN
ON PXP.ProbationID = PBN.ID
INNER JOIN Class-Participant CXP
ON PAR.ID = CXP.ParticipantID
INNER JOIN Class CLS
ON CXP.ClassID = CLS.ID
INNER JOIN Official OFR
ON PAR.ReferringPO = OFR.ID
INNER JOIN Participant-Official PXO
ON PAR.ID = PXO.ParticipantID
INNER JOIN Official OFA
ON PXO.OfficialID = OFA.ID
المحلول
Yah، MS-Access هو غبي.
لا أعتقد أن المرء موجود (ربما ليس سوقا ضخما إما للذهاب من MS-SQL / TSQL إلى MS-Access). عادة ما استخدم عرض التصميم الذي ليس معالجا حقا بقدر ما أشعر بالقلق. ثم أضيف الجداول يدويا، ثم (إذا لم أقم بإنشاء مخطط للعلاقات المناسبة، أو شيء ما غير تقليدي قليلا) إنشاء العلاقات يدويا في المصمم. بعد ذلك، أتحقق من الاستعلام في عرض SQL والصحيح كما هو الحاجة.
في حالة مثالك (كما أشرت)، ربما تحتاج إلى الأقواس، وسوف تضطر إليهم يدويا. ربما تريد شيئا مثل هذا:
SELECT ...
FROM (((Participant PAR
INNER JOIN Individual IND
ON PAR.APETSID = IND.APETSID)
INNER JOIN Ethnicity ETH
ON IND.EthnicityID = ETH.ID)
INNER JOIN Education EDU
ON IND.EducationID = EDU.ID)
INNER JOIN Marital MAR
ON IND.Marital = MAR.ID
(إذا كان لديك n inner ourins، فستحتاج إلى N-1 Open-Parenthesis في البداية، وواحدة على نهاية من أي وقت مضى من الانضمام؛ باستثناء آخر واحد)
نصائح أخرى
هذا يعمل في الوصول.
SELECT *
FROM (((Individual AS IND
INNER JOIN Ethnicity AS ETH
ON IND.EthnicityID = ETH.ID)
INNER JOIN Education AS EDU
ON IND.EducationID = EDU.ID)
INNER JOIN Marital AS MAR
ON IND.Marital = MAR.ID)
INNER JOIN (((((((Participant AS PAR
INNER JOIN Official AS OFR
ON PAR.ReferringPO = OFR.ID)
INNER JOIN [Class-Participant] AS CXP
ON PAR.ID = CXP.ParticipantID)
INNER JOIN Class AS CLS
ON CXP.ClassID = CLS.ID)
INNER JOIN [Participant-Official] AS PXO
ON PAR.ID = PXO.ParticipantID)
INNER JOIN Official AS OFA
ON PXO.OfficialID = OFA.ID)
INNER JOIN [Participant-Probation] AS PXP
ON PAR.ID = PXP.ParticipantID)
INNER JOIN Probation AS PBN
ON PXP.ProbationID = PBN.ID)
ON IND.APETSID = PAR.APETSID
كما ترون، يتم تجميع الجداول المراد انضمامها معا.