كيف يخرج اسم العرض من المزامنة مع تعريف العرض؟

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

  •  13-12-2019
  •  | 
  •  

سؤال

enter image description here

لقد تعقبت خطأً في نظامي أدى إلى هذا الوضع الشاذ - على الأقل إنه شذوذ في نظامي المكون من 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 على أي حال...

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