كيف يخرج اسم العرض من المزامنة مع تعريف العرض؟
-
13-12-2019 - |
سؤال
لقد تعقبت خطأً في نظامي أدى إلى هذا الوضع الشاذ - على الأقل إنه شذوذ في نظامي المكون من 15 كتالوجًا بمخططات متشابهة ولكن غير متكافئة.
ما الذي يجعل [TABLE_NAME] في [INFORMATION_SCHEMA].[VIEWS] مختلفًا عن القيمة الموجودة في [VIEW_DEFINITION]؟
يجعلني أعتقد أنني لا أفهم شيئًا عن طرق العرض أو جداول النظام في SQL Server ....
المحلول
إذا قمت بإعادة تسمية طريقة العرض، يتغير الاسم، ولكن لا يتغير التعريف.
يجب عليك القيام بذلك ك DROP
/CREATE
أو ALTER
البرنامج النصي، وليس عن طريق النقر بزر الماوس الأيمن أو استخدامه sp_rename
.
هذا هو بالفعل السلوك المتوقع لكافة الوحدات النمطية.فيما يلي اختبار سريع باستخدام إجراء مخزن بسيط:
CREATE PROCEDURE dbo.proc_foo
AS
SELECT 1;
GO
-- rename it to proc_bar
EXEC sys.sp_rename N'dbo.proc_foo', N'proc_bar', N'OBJECT';
GO
-- check the definition from various sources
SELECT od = OBJECT_DEFINITION(OBJECT_ID(N'dbo.proc_bar')),
info_s = (SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME = N'proc_bar' AND SCHEMA_NAME = N'dbo'),
sql_m = (SELECT definition FROM sys.sql_modules
WHERE [object_id] = OBJECT_ID(N'dbo.proc_bar'));
نتائج:
od info_s sql_m
----------------------------- ----------------------------- -----------------------------
CREATE PROCEDURE dbo.proc_foo CREATE PROCEDURE dbo.proc_foo CREATE PROCEDURE dbo.proc_foo
AS AS AS
SELECT 1; SELECT 1; SELECT 1;
في أي حال، لا ينبغي أن تستخدم INFORMATION_SCHEMA
على أي حال...
لا تنتمي إلى StackOverflow