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

Как да проверите дали T-SQL UDF е свързан със схема (дори когато е криптиран)

Обвързването със схема на обект, като например дефинирана от потребителя функция (UDF), се счита за добра практика, тъй като предотвратява извършването на промени във всички обекти, които препраща, които биха могли неволно да нарушат функцията.

Можете да обвържете със схема дефинирана от потребителя функция в момента, в който я създавате, или можете да промените по-късно.

Обикновено можете да проверите дали UDF е свързан със схема в SQL Server, като прегледате неговата дефиниция. Обикновено можете да направите това чрез графичния интерфейс, като изберете „Скрипт като създаване“ или подобно.

Можете също да го направите с T-SQL, като изберете definition колона на sys.sql_modules изглед на системен каталог.

Но това ще работи само ако UDF не е криптиран.

Има обаче друга колона в sys.sql_modules изглед, който служи на нашата цел, независимо дали UDF е криптиран или не:is_schema_bound

Пример 1 – Криптиран UDF

Ето пример как да разберете дали криптирана дефинирана от потребителя функция, наречена udf_CatsByName_ITVF е свързан със схемата или не.

SELECT дефиниция, is_schema_boundFROM sys.sql_modulesWHERE object_id =OBJECT_ID('udf_CatsByName_ITVF');

Резултат:

<пред>+--------------+-------------------+| определение | is_schema_bound ||--------------+------------------|| NULL | 1 |+--------------+-------------------+

В този случай UDF е свързан със схема.

Също така забележете, че definition колоната връща NULL, защото функцията е използвала криптиране.

Пример 2 – UDF без криптиране

Ако криптирането не беше приложено, бихме могли да видим пълната дефиниция в тази колона и щяхме да видим аргумента WITH SCHEMABINDING в определението.

Ето отново заявката, когато функцията не е криптирана.

SELECT definitionFROM sys.sql_modulesWHERE object_id =OBJECT_ID('udf_CatsByName_ITVF');

Резултат:

+--------------+| определение ||--------------|| CREATE FUNCTION dbo.udf_CatsByName_ITVF( @CatName varchar(70) ) ВРЪЩА ТАБЛИЦА СЪС SCHEMABINDINGASRETURN ( ИЗБЕРЕТЕ CatId, CatName, Phone FROM dbo.Cats WHERE CatName =@CatName ); |+--------------+

Премахнах is_schema_bound колона от заявката, за да се улесни четенето.

Така или иначе, is_schema_bound колоната може да се използва независимо дали UDF е криптиран или не.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Архивиране само на база данни в WHM

  2. Свързване на SAS JMP към Salesforce.com

  3. Свързване на Microsoft Excel към Xero

  4. Непредвидени странични ефекти – сесии за сън, задържащи ключалки

  5. Пренаписване на заявки за подобряване на производителността