Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Опресняване на метаданни на потребителски функции t-SQL

отговорът на gbn е най-добрият - но когато имате SCHEMABINDING, това често ви пречи да правите основни промени, без първо да премахнете SCHEMABINDING и след това да го замените, когато пресъздавате модула. Не можете да използвате SCHEMABINDING, ако вашият обект препраща към обекти извън базата данни.

Ако тази трудност е толкова голяма, че не желаете или не можете да използвате SCHEMABINDING, тогава използвайте sp_refreshsqlmodule в някакъв редовен процес, който изпълнявате, за да проверите вашите SQL модули за грешки, преди те действително да бъдат използвани (може да се изпълнява на всеки изглед без схема, UDF, съхранена процедура и т.н.), е ваш приятел.

Можете да използвате и двете техники заедно - не можете (и няма нужда) да стартирате sp_refreshsqlmodule срещу обекти, свързани със схема.

напр. можете да го стартирате само на тези модули:

SELECT *
FROM    INFORMATION_SCHEMA.ROUTINES
        WHERE   (
                 OBJECTPROPERTY(OBJECT_ID(QUOTENAME(ROUTINE_SCHEMA) + '.' + QUOTENAME(ROUTINE_NAME)), N'IsSchemaBound') IS NULL
                 OR OBJECTPROPERTY(OBJECT_ID(QUOTENAME(ROUTINE_SCHEMA) + '.' + QUOTENAME(ROUTINE_NAME)),
                                   N'IsSchemaBound') = 0
                )


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Рекурсивна заявка в SQL Server

  2. Неуспешно свързване към SQL сървър от Linux

  3. Автоматично изтриване на дата/час на MSSQL запис

  4. MSSQL 2008:Вземете последния актуализиран запис по конкретно поле

  5. SQL Server създава дефинирани от потребителя типове таблици със схема, която не работи правилно