שאלה:
יש לי Access DB וטבלה SQL לאחסן מידע. תחת תכונות שרת מקושר של SQL 7.0, אפשרתי ל- SQL לראות את Access DB כמסד נתונים SQL אחר. כמו כן, כתבתי פרוצדורה מאוחסנת המעתיקה רשומות Access DB לטבלה SQL. הפעלה מ- ISQL/Query Analyzer, הפרוצדורה המאוחסנת פועלת ועובדת כראוי. קריאה לפרוצדורה המאוחסנת מתוך מיומנות מפיקה את הודעת השגיאה הבאה מ- SQL Server: שאילתות הטרוגניות דורשות את ANSI_NULLS ואפשרויות ANSI_WARNINGS כדי
להגדיר את החיבור. פעולה זו מבטיחה סמנטיות עקביות של שאילתה. הפוך אפשרויות אלה לזמינות ולאחר מכן תגיש מחדש את השאילתה. האם ניתן אפילו להפעיל פרוצדורה מאוחסנת זו מתוך מיומנות?
תשובה:
כן, אך נצטרך לשנות מעט את הפרוצדורה המאוחסנת. הסיבה לכך היא ש- כדי לקרוא טבלאות SQL כראוי במיומנות, יש לכבות אפשרויות אלה כך שהתקשרות לפרוצדורות מאוחסנות במיומנות תפתור פקודות אלה לפני הפעלת הפרוצדורה המאוחסנת. המשתמש חייב לוודא שנתונים המפרים כללים אלה אינם מוצגים בטבלת SQL. במדגם שלהלן, table_access היא טבלת הגישה. table_מחשב היא SQL הטבלה.
if exists (select * from sysobjects where id =
object_id('dbo.access_update') and sysstat & 0xf = 4)
drop procedure dbo.access_update
GO
create procedure dbo.access_update @O_SQL_Error_State int = NULL output
as
INSERT INTO access_table ( DOCNUMBR, DOCAMNT )
SELECT access_test.DOCNUMBR, access_test.DOCAMNT
FROM access_test
GO
אנו יכולים לשנות את הפרוצדורה המאוחסנת כדי להגדיר את האזהרות שלנו כך:
if exists (select * from sysobjects where id =
object_id('dbo.access_update') and sysstat & 0xf = 4)
drop procedure dbo.access_update
GO
create procedure dbo.access_update @O_SQL_Error_State int = NULL output
as
set ANSI_NULLS ON
SET ANSI_WARNINGS ON
exec access_table2 ( DOCNUMBR, DOCAMNT )
GO
במקרה זה, הפרוצדורה המאוחסנת יורשת את התכונות של מה שקורא לה. עבור מצב זה, מיומנות קוראת theaccess_tableprocedure אשר מפעילה את ANSI_NULLS & ANSI_WARNINGS ולאחר מכן מתקשרת לפרוצדורה המאוחסנת האמיתית ועוברת בפרמטרים שלנו.
מאמר זה היה מזהה מסמך TechKnowledge:10011