{"id":445315,"date":"2025-01-17T15:01:47","date_gmt":"2025-01-17T15:01:47","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=445315"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2025-01-17T15:01:47","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=445315","title":{"rendered":"<span>\u041f\u0435\u0440\u0435\u043b\u0438\u0432\u0430\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0411\u0414 \u043c\u0435\u0436\u0434\u0443 \u0441\u0440\u0435\u0434\u0430\u043c\u0438: \u0431\u044b\u0441\u0442\u0440\u043e \u0438 \u0431\u0435\u0437 \u0431\u043e\u043b\u0438 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 MS SQL<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/452\/a05\/299\/452a0529951915a18468e6eda434d54a.jpg\" width=\"1600\" height=\"900\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/452\/a05\/299\/452a0529951915a18468e6eda434d54a.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437\u00a0\u043e\u0434\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u044b \u0432\u00a0\u0434\u0440\u0443\u0433\u0443\u044e\u00a0\u2014 \u0437\u0430\u0434\u0430\u0447\u0430, \u0441\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f\u00a0\u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438\u0437\u00a0\u043f\u0440\u043e\u0434\u0430 \u0432\u00a0\u0441\u0440\u0435\u0434\u044b \u0434\u043b\u044f\u00a0\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412\u043c\u0435\u0441\u0442\u0435 \u0441\u00a0\u0442\u0435\u043c, \u0442\u0430\u043a\u0430\u044f \u00ab\u043f\u0435\u0440\u0435\u0437\u0430\u043b\u0438\u0432\u043a\u0430\u00bb \u0442\u0430\u0431\u043b\u0438\u0446 \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043a\u0432\u0435\u0441\u0442, \u043f\u043e\u00a0\u0445\u043e\u0434\u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u043e\u00a0\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441\u00a0\u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u0438\u043c \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0443\u0447\u0448\u0435\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430.<\/p>\n<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0415\u0432\u0433\u0435\u043d\u0438\u0439 \u0413\u0440\u0438\u0431\u043a\u043e\u0432. \u042f \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0432\u00a0\u0446\u0435\u043d\u0442\u0440\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 VK. \u0412\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0434\u043d\u043e \u0438\u0437\u00a0\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043f\u0435\u0440\u0435\u0437\u0430\u043b\u0438\u0432\u043a\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438\u0437\u00a0\u043e\u0434\u043d\u043e\u0439 \u0411\u0414 \u0432\u00a0\u0434\u0440\u0443\u0433\u0443\u044e \u043d\u0430\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0435 MS SQL.<\/p>\n<h3>\u0422\u0438\u043f\u043e\u0432\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0435\u0440\u0435\u0437\u0430\u043b\u0438\u0432\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u0432\u00a0\u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043b\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0411\u0414 \u0438\u0437\u00a0\u043e\u0434\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u044b \u0432\u00a0\u0434\u0440\u0443\u0433\u0443\u044e, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u044b:<\/p>\n<ul>\n<li>\n<p>\u0434\u0435\u043b\u0430\u044e\u0442 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e \u0441\u00a0\u043f\u0440\u043e\u0434\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442 \u0431\u044d\u043a\u0430\u043f \u043d\u0430\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439, \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442 \u043e\u0431\u0435\u0437\u043b\u0438\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0438\u043b\u0438\u00a0\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0431\u044d\u043a\u0430\u043f \u0441\u00a0\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445;<\/p>\n<\/li>\n<li>\n<p>\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e \u0432\u00a0\u043d\u0443\u0436\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f\u00a0\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f).<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u0432\u0435\u0441\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u00a0\u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u0437 \u0432\u00a0\u0441\u0443\u0442\u043a\u0438 \u043d\u043e\u0447\u044c\u044e \u0438\u043b\u0438\u00a0\u0440\u0430\u0437 \u0432\u00a0\u043d\u0435\u0434\u0435\u043b\u044e \u043d\u0430\u00a0\u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445).<\/p>\n<p>\u041d\u043e\u00a0\u0443 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0435\u0441\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a: \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u044e \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043e\u00a0\u0432\u0441\u0435 \u0441\u0440\u0435\u0434\u044b\u00a0\u2014 \u0432\u0435\u0441\u044c\u043c\u0430 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0438 \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u0440\u043e\u0433\u043e\u0439 \u0432\u00a0\u043f\u043b\u0430\u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u00a0\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435 \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442 \u0447\u0438\u0441\u0442\u043a\u0438 \u043a\u0430\u043a\u00a0\u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0441\u0451, \u0447\u0442\u043e\u00a0\u0441\u0442\u0430\u0440\u0435\u0435 \u043e\u0434\u043d\u043e\u0433\u043e\u00a0\u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u043d\u043e\u0433\u043e \u0433\u043e\u0434\u0430), \u0442\u0430\u043a \u0438 \u043f\u043e\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044f\u043c. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043c\u0430 \u0411\u0414 \u0432\u00a0\u0434\u0435\u0441\u044f\u0442\u043a\u0438, \u0430\u00a0\u0442\u043e \u0438 \u0432\u00a0\u0441\u043e\u0442\u043d\u0438 \u0440\u0430\u0437.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u0434\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u0432\u00a0\u0441\u0440\u0435\u0434\u0430\u0445 \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0411\u0414, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043e\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435. \u041f\u0440\u0438\u0447\u0435\u043c\u00a0\u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0447\u0442\u043e\u0431\u044b\u00a0\u0431\u044b\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432\u00a0\u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0433\u0434\u0430 \u0411\u0414 \u043d\u0435\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u00a0\u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u0437 \u0432\u00a0\u043d\u0435\u0434\u0435\u043b\u044e \u043d\u043e\u0447\u044c\u044e \u0438\u043b\u0438\u00a0\u043a\u0430\u0436\u0434\u0443\u044e \u043d\u043e\u0447\u044c.<\/p>\n<p>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432\u00a0\u0442\u0430\u043a\u0438\u0445 \u043a\u0435\u0439\u0441\u0430\u0445 \u0432\u0430\u0436\u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0437\u0430\u043b\u0438\u0432\u0430\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0411\u0414 \u0438\u0437\u00a0\u043e\u0434\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u044b \u0432\u00a0\u0434\u0440\u0443\u0433\u0443\u044e \u0431\u0435\u0437\u00a0\u0440\u0443\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0438 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u043c\u0435\u0448\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432.<\/p>\n<h3>\u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u0430<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043e\u0442\u00a0\u0442\u0435\u043e\u0440\u0438\u0438 \u043a\u00a0\u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0434\u0438\u043d \u0438\u0437\u00a0\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043f\u0435\u0440\u0435\u0437\u0430\u043b\u0438\u0432\u043a\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438\u0437\u00a0\u043e\u0434\u043d\u043e\u0439 \u0411\u0414 \u0432\u00a0\u0434\u0440\u0443\u0433\u0443\u044e \u043d\u0430\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0435 MS SQL. \u041f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u0441\u0440\u0430\u0437\u0443 \u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c\u0441\u044f \u0438 \u043f\u0440\u0438\u043c\u0435\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u0447\u0442\u043e\u00a0\u043e\u0431\u0435 \u0411\u0414 \u043d\u0430\u00a0\u043e\u0434\u043d\u043e\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0435 \u0421\u0423\u0411\u0414\u00a0\u2014 \u0442\u043e \u0435\u0441\u0442\u044c, \u0411\u0414\u2011\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0443\u0436\u0435 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432\u00a0\u0442\u043e\u0439\u00a0\u0436\u0435 \u0421\u0423\u0411\u0414, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0446\u0435\u043b\u0435\u0432\u0430\u044f \u0411\u0414.<\/p>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c:<\/p>\n<ul>\n<li>\n<p>\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0441\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0441\u0435 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f\u00a0\u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0438, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u0445.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043f\u043e\u043b\u043d\u0443\u044e \u043e\u0447\u0438\u0441\u0442\u043a\u0443 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>TRUNCATE<\/code> \u0441\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0438\u0445 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0431\u0438\u0442\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043b\u0438\u0442\u044b\u0445 \u0432\u044b\u0448\u0435 \u0442\u0430\u0431\u043b\u0438\u0446.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u0441\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c \u043a\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<details class=\"spoiler\">\n<summary>\u0414\u043b\u044f\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SET NOCOUNT OFF;  DECLARE @DB       VARCHAR(250) = QUOTENAME(DB_NAME()),         @DBMaster VARCHAR(255) = '\u0411\u0414-\u043c\u0430\u0441\u0442\u0435\u0440',                       @ERROR    VARCHAR(MAX);    DECLARE @HistoryLimited           bit = 1,           @table_name               nvarchar(255),           @is_identity              int = 0,           @stm                      nvarchar(max) = '',           @cols                     nvarchar(max) = '',           @IsNOTInsert              bit,           @schema_name              nvarchar(255),           @col_name_identity        nvarchar(255),           @referencing_object       nvarchar(255),           @referenced_object        nvarchar(255),           @constraint_name          nvarchar(255),           @referencing_columns      nvarchar(max),           @referenced_columns       nvarchar(max),           @rules                    nvarchar(max),           @key_cols                 nvarchar(max),           @StartMoment              DATETIME2,           @FinishMoment             DATETIME2,           @delete_referential_action INT,           @update_referential_action INT,           @max_row_insert           INT = 100000,           @isClearTableFKs          BIT = 1,           @RowCount                 BIGINT = 1,           @WhileDelCount            INT = 0;           ;    DECLARE @cnt TABLE (cnt BIGINT NOT NULL);    DROP TABLE IF EXISTS #tbl_res;    CREATE TABLE #tbl_res (                            SchName       NVARCHAR(255) NOT NULL,                            TblName       NVARCHAR(255) NOT NULL,                            StartMoment   DATETIME2     NOT NULL,                            FinishMoment  DATETIME2     NOT NULL,                            Cnt           BIGINT        NOT NULL,                            ErrorMsg      NVARCHAR(MAX) NULL                          );<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0417\u0434\u0435\u0441\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u043b\u0435\u0435 \u0432\u00a0\u0441\u043a\u0440\u0438\u043f\u0442\u0435, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u0438\u0442\u043e\u0433 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0435\u0440\u0435\u0437\u0430\u043b\u0438\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u00a0\u0442\u0430\u0439\u043c\u0438\u043d\u0433\u043e\u043c.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432\u0441\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0432\u00a0\u0411\u0414. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<strong> <\/strong><code>EXEC sys.sp_msforeachtable \"ALTER TABLE ? NOCHECK CONSTRAINT ALL\"<\/code><\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432\u0441\u0435 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b \u0411\u0414<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">DECLARE r_cursor_trigg_off CURSOR LOCAL FAST_FORWARD READ_ONLY FOR SELECT FORMATMESSAGE('ALTER TABLE [%s].[%s] DISABLE TRIGGER [%s];'      + CHAR(13)      , SCHEMA_NAME(b.[schema_id])      , OBJECT_NAME(t.parent_id)      , t.[Name]) AS stm         FROM sys.triggers          t         LEFT JOIN sys.tables  b ON b.object_id = t.parent_id         WHERE t.is_disabled = 0           AND t.type_desc = 'SQL_TRIGGER'           AND OBJECT_NAME(t.parent_id) IS NOT NULL         ORDER BY SCHEMA_NAME(b.[schema_id]) ASC,                  OBJECT_NAME(t.parent_id) ASC;      OPEN r_cursor_trigg_off;     FETCH NEXT FROM r_cursor_trigg_off     INTO @stm;      WHILE @@FETCH_STATUS = 0     BEGIN       PRINT @stm;        BEGIN TRY         BEGIN TRANSACTION;           EXEC sys.sp_executesql @stmt = @stm;         COMMIT;       END TRY       BEGIN CATCH         SET @ERROR = ERROR_MESSAGE();         PRINT @ERROR;         IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION       END CATCH              FETCH NEXT FROM r_cursor_trigg_off       INTO @stm;     END      CLOSE r_cursor_trigg_off;     DEALLOCATE r_cursor_trigg_off;      SET @stm = '';      SELECT @stm += FORMATMESSAGE('DISABLE TRIGGER [%s] ON DATABASE;'                  + CHAR(13), t.[Name])     FROM sys.triggers          t     LEFT JOIN sys.tables  b ON b.[object_id] = t.parent_id        WHERE t.is_disabled = 0          AND t.[type_desc] = 'SQL_TRIGGER'          AND OBJECT_NAME(t.parent_id) IS NULL;      PRINT @stm;      BEGIN TRY       BEGIN TRANSACTION;         EXEC sys.sp_executesql @stmt = @stm;       COMMIT;     END TRY     BEGIN CATCH       SET @ERROR = ERROR_MESSAGE();       PRINT @ERROR;       IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION     END CATCH<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0414\u0430\u043b\u0435\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">DROP TABLE IF EXISTS #tbls; CREATE TABLE #tbls (                     [name]      NVARCHAR(255) NOT NULL,                     sch_name    NVARCHAR(255) NOT NULL,                     IsNOTInsert BIT           NOT NULL                    );  INSERT INTO #tbls (                     [name],                     sch_name,                     IsNOTInsert                   )   SELECT t.[name],          SCHEMA_NAME(t.[schema_id]) AS sch_name,          --\u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c          --\u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u043b\u0438 \u043d\u0435\u0442          --\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0443\u0436\u043d\u043e (0-\u0434\u0430, 1-\u043d\u0435\u0442)          0 AS IsNOTInsert       FROM sys.tables AS t       --\u0432 \u0444\u0438\u043b\u044c\u0442\u0440\u0435 \u0437\u0430\u0434\u0430\u0435\u043c \u043a\u0430\u043a\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0431\u0440\u0430\u0442\u044c \u0432 \u0440\u0430\u0441\u0447\u0435\u0442       --(\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u0430\u043a\u0438\u0435 \u043d\u0435 \u0431\u0440\u0430\u0442\u044c \u0432 \u0440\u0430\u0441\u0447\u0451\u0442)       WHERE t.[name] NOT LIKE 'unused%'         AND t.[name] NOT LIKE 'removed%'         AND t.[name] NOT LIKE 'migrated%'         AND t.[name] NOT LIKE 'migration%'         AND t.[name] NOT LIKE 'sysdiag%'         AND t.[name] NOT LIKE 'test%'         AND t.[name] NOT LIKE 'tmp%'         AND t.[name] NOT LIKE '%_cache'         AND t.[name] NOT IN ('FKs');<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0431\u0435\u0440\u0435\u043c \u0432\u0441\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0438\u0445 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 dbo.FKs, \u0437\u0430\u0442\u0435\u043c \u2014 \u0443\u0434\u0430\u043b\u0438\u043c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">IF NOT EXISTS (SELECT 1 FROM sys.tables AS t                          WHERE t.[name]= 'FKs'                            AND t.[schema_id] = SCHEMA_ID('dbo'))     BEGIN       CREATE TABLE dbo.FKs (                           referencing_object      NVARCHAR(255) NOT NULL,                           constraint_column_id    INT NOT NULL,                           referencing_column_name NVARCHAR(255) NOT NULL,                           referenced_object       NVARCHAR(255) NOT NULL,                           referenced_column_name  NVARCHAR(255) NOT NULL,                           constraint_name         NVARCHAR(255) NOT NULL,                           delete_referential_action INT NOT NULL,                           update_referential_action INT NOT NULL                         );     END     ELSE IF (@isClearTableFKs = 1)     BEGIN       TRUNCATE TABLE dbo.FKs;     END      INSERT INTO dbo.FKs (                   referencing_object,                   constraint_column_id,                   referencing_column_name,                   referenced_object,                   referenced_column_name,                   constraint_name,                   delete_referential_action,                   update_referential_action                  )     SELECT CONCAT('[', SCHEMA_NAME(P.[schema_id]), '].['             , OBJECT_NAME(FK.parent_object_id), ']') AS referencing_object,     FK.constraint_column_id,     CONCAT('['     , COL_NAME(FK.parent_object_id, FK.parent_column_id)            , ']') AS referencing_column_name,     CONCAT('['     , SCHEMA_NAME(R.[schema_id]), '].['     , OBJECT_NAME(FK.referenced_object_id)         , ']') AS referenced_object,     CONCAT('['            , COL_NAME(FK.referenced_object_id, FK.referenced_column_id)            , ']') AS referenced_column_name,     CONCAT('['            , OBJECT_NAME(FK.constraint_object_id)            , ']') AS constraint_name,     FKK.delete_referential_action,     FKK.update_referential_action     FROM sys.foreign_key_columns AS FK     INNER JOIN sys.foreign_keys AS FKK ON FKK.[object_id]                                                  = FK.constraint_object_id     INNER JOIN sys.tables AS P ON P.[object_id] = FK.parent_object_id     INNER JOIN sys.tables AS R ON R.[object_id] = FK.referenced_object_id     WHERE NOT EXISTS (SELECT 1 FROM dbo.FKs AS t0                       WHERE t0.constraint_name = CONCAT('['                             , OBJECT_NAME(FK.constraint_object_id), ']'));      DELETE FROM trg     FROM dbo.FKs AS trg     WHERE NOT EXISTS (                       SELECT 1                       FROM #tbls AS src                       WHERE trg.referencing_object = CONCAT('['                                     , src.sch_name, '].[', src.[name], ']')                          OR trg.referenced_object  = CONCAT('['                                     , src.sch_name, '].[', src.[name], ']')                      )      DECLARE r_cursor_fk_drop CURSOR LOCAL FAST_FORWARD READ_ONLY FOR         SELECT t.referencing_object,                t.referenced_object,                t.constraint_name         FROM dbo.FKs AS t         WHERE EXISTS (SELECT 1 FROM sys.foreign_key_columns AS FK                        WHERE t.constraint_name = CONCAT('['                                     , OBJECT_NAME(FK.constraint_object_id)                                                   , ']'))         GROUP BY t.referencing_object,                  t.referenced_object,                  t.constraint_name;      OPEN r_cursor_fk_drop;     FETCH NEXT FROM r_cursor_fk_drop     INTO @referencing_object,          @referenced_object,          @constraint_name      WHILE @@FETCH_STATUS = 0     BEGIN         SET @stm = CONCAT('ALTER TABLE ', @referencing_object                         , ' DROP CONSTRAINT ', @constraint_name, ';');          PRINT @stm;          BEGIN TRY           BEGIN TRANSACTION;             EXEC sys.sp_executesql @stmt = @stm;           COMMIT;         END TRY         BEGIN CATCH           SET @ERROR = ERROR_MESSAGE();           PRINT @ERROR;           IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION         END CATCH          FETCH NEXT FROM r_cursor_fk_drop         INTO @referencing_object,              @referenced_object,              @constraint_name;     END      CLOSE r_cursor_fk_drop;     DEALLOCATE r_cursor_fk_drop;<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0421\u043b\u0435\u0434\u043e\u043c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0443 \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043e\u0447\u0438\u0441\u0442\u043a\u0443 \u0438 \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u043d\u0435\u0435 \u0442\u0430\u0431\u043b\u0438\u0446<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">DECLARE r_cursor CURSOR LOCAL FAST_FORWARD READ_ONLY FOR SELECT t.[name],        t.sch_name,        t.IsNOTInsert   FROM #tbls AS t   ORDER BY t.[name] ASC;  OPEN r_cursor; FETCH NEXT FROM r_cursor INTO @table_name,      @schema_name,      @IsNOTInsert;  WHILE @@FETCH_STATUS = 0 BEGIN   SET @cols = '';   SET @is_identity = 0;   SET @col_name_identity = NULL;    SET @stm = CONCAT('TRUNCATE TABLE ', @DB                     , '.[', @schema_name, '].[', @table_name, ']');    PRINT @stm;    BEGIN TRY     BEGIN TRANSACTION;       EXEC sys.sp_executesql @stmt = @stm;     COMMIT;   END TRY   BEGIN CATCH     SET @ERROR = ERROR_MESSAGE();     PRINT @ERROR;     IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION   END CATCH    IF (@IsNOTInsert = 0)   BEGIN       SELECT @cols        = @cols + CASE WHEN @cols = ''                                THEN c.[name] ELSE ',' + c.name END,              @is_identity = @is_identity + c.is_identity,              @col_name_identity = CASE WHEN (c.is_identity = 1)                                         THEN c.[name]                                         ELSE @col_name_identity END         FROM sys.tables t,              sys.columns c         WHERE t.[object_id] = c.[object_id]           AND t.[name]      = @table_name           AND c.is_computed = 0;        SET @stm = '';        IF @is_identity &gt; 0 SET @stm = CONCAT('SET IDENTITY_INSERT '             , @DB, '.[', @schema_name, '].[', @table_name, '] ON');        SET @stm = CONCAT(@stm, ' INSERT INTO ', @DB                   , '.[', @schema_name, '].[', @table_name                   , '](', @cols, ') SELECT ', @cols                   , ' FROM [',@DBMaster,'].['                   , @schema_name, '].[', @table_name, '] WITH(NOLOCK) ');        --\u0437\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u043c\u0438       IF @HistoryLimited = 1       BEGIN         IF @table_name LIKE '%History'             SET @stm = CONCAT(@stm         , ' WHERE ChangeDateTime &gt; DATEADD   (month, -1, SYSDATETIME()) ');       END        IF @is_identity &gt; 0 SET @stm = CONCAT(@stm          , ' SET IDENTITY_INSERT ', @DB          , '.[', @schema_name, '].[', @table_name, '] OFF');              IF @is_identity &gt; 0 SET @stm = CONCAT(@stm          , ' DBCC CHECKIDENT (\"', @table_name, '\")');        SET @StartMoment = SYSDATETIME();       SET @ERROR = NULL;        PRINT @stm;        BEGIN TRY         BEGIN TRANSACTION;           EXEC sys.sp_executesql @stmt = @stm;         COMMIT;       END TRY       BEGIN CATCH         SET @ERROR = ERROR_MESSAGE();         PRINT @ERROR;         IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION       END CATCH        SET @FinishMoment = SYSDATETIME();        SET @stm = CONCAT('SELECT COUNT_BIG(*) FROM '           , '[', @schema_name, '].[', @table_name, '] WITH (NOLOCK);');        DELETE FROM @cnt;        INSERT INTO @cnt (cnt)       EXEC sys.sp_executesql @stmt = @stm;        INSERT INTO #tbl_res (                 SchName,                 TblName,                 StartMoment,                 FinishMoment,                 Cnt,                 ErrorMsg                )       SELECT @schema_name,              @table_name,              @StartMoment,              @FinishMoment,              COALESCE((SELECT SUM(cnt) FROM @cnt), 0) AS Cnt,              @ERROR;   END    FETCH NEXT FROM r_cursor   INTO @table_name,        @schema_name,        @IsNOTInsert; END CLOSE r_cursor; DEALLOCATE r_cursor;      <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043a\u0430\u043a\u0438\u0435\u2011\u0442\u043e \u0435\u0449\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0441\u00a0\u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0443\u0436\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0438 \u0440\u043e\u043b\u0438 \u0441\u00a0\u043f\u0440\u0430\u0432\u0430\u043c\u0438 \u0432\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0411\u0414.<\/p>\n<details class=\"spoiler\">\n<summary>\u0417\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0431\u0438\u0442\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0442\u043e \u0435\u0441\u0442\u044c \u0442\u0435\u0445, \u043f\u043e\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0435\u0442 \u0434\u043b\u044f\u00a0\u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u0437\u00a0\u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u00a0\u0434\u0440\u0443\u0433\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043f\u043e\u00a0\u0432\u043d\u0435\u0448\u043d\u0435\u043c\u0443 \u043a\u043b\u044e\u0447\u0443<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">WHILE (@RowCount &gt; 0) BEGIN   SET @RowCount = 0;   SET @WhileDelCount += 1;    DECLARE r_cursor_fk_corr CURSOR LOCAL FAST_FORWARD READ_ONLY FOR   SELECT t.referencing_object,          t.referenced_object,          t.constraint_name,          STRING_AGG (CONCAT('(trg.', t.referencing_column_name          , '=src.', t.referenced_column_name, ')'), ' AND ')           WITHIN GROUP (ORDER BY t.constraint_column_id ASC) AS rules,          STRING_AGG (CONCAT('(trg.', t.referencing_column_name          , ' IS NOT NULL)'), ' AND ')           WITHIN GROUP (ORDER BY t.constraint_column_id ASC) AS key_cols   FROM dbo.FKs AS t   GROUP BY t.referencing_object,            t.referenced_object,            t.constraint_name;  OPEN r_cursor_fk_corr; FETCH NEXT FROM r_cursor_fk_corr INTO @referencing_object    , @referenced_object    , @constraint_name    , @rules    , @key_cols;  WHILE @@FETCH_STATUS = 0 BEGIN     SET @stm = CONCAT('DELETE FROM trg FROM ', @referencing_object     ,' AS trg WHERE ', @key_cols     , ' AND NOT EXISTS (SELECT 1 FROM ', @referenced_object,     ' AS src WITH (NOLOCK) WHERE ', @rules, ');');      PRINT @stm;      BEGIN TRY       BEGIN TRANSACTION;         EXEC sys.sp_executesql @stmt = @stm;          SET @RowCount += @@ROWCOUNT;       COMMIT;     END TRY     BEGIN CATCH       SET @ERROR = ERROR_MESSAGE();       PRINT @ERROR;       IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION     END CATCH      FETCH NEXT FROM r_cursor_fk_corr     INTO @referencing_object        , @referenced_object        , @constraint_name        , @rules        , @key_cols; END    CLOSE r_cursor_fk_corr;   DEALLOCATE r_cursor_fk_corr; END  PRINT CONCAT('WHILE DELETE COUNT: ', @WhileDelCount);<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043d\u0435\u043a\u043e\u043d\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0434\u043e\u00a0\u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u0442\u0430\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u043a\u043e\u0433\u0434\u0430\u00a0\u0431\u044b\u043b\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437\u00a0\u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043d\u043e\u00a0\u043f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c\u00a0\u0431\u044b\u043b\u0430 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0441\u0432\u044f\u0437\u044c \u0432\u00a0\u0434\u0440\u0443\u0433\u043e\u0439 \u0443\u0436\u0435 \u0440\u0430\u043d\u0435\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u0414\u0430\u043b\u0435\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0434\u043b\u044f\u00a0\u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u0432\u044b\u0448\u0435 \u0442\u0430\u0431\u043b\u0438\u0446<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">DECLARE r_cursor_stat CURSOR LOCAL FAST_FORWARD READ_ONLY FOR SELECT CONCAT('UPDATE STATISTICS ', @DB, '.[' , t.sch_name, '].[', t.[name], '] WITH FULLSCAN;') AS stm FROM #tbls AS t;  OPEN r_cursor_stat; FETCH NEXT FROM r_cursor_stat INTO @stm;  WHILE @@FETCH_STATUS = 0 BEGIN   PRINT @stm;    BEGIN TRY     BEGIN TRANSACTION;       EXEC sys.sp_executesql @stmt = @stm;     COMMIT;   END TRY   BEGIN CATCH     SET @ERROR = ERROR_MESSAGE();     PRINT @ERROR;     IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION   END CATCH    FETCH NEXT FROM r_cursor_stat   INTO @stm END  CLOSE r_cursor_stat; DEALLOCATE r_cursor_stat;<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b \u0432 \u0411\u0414<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">DECLARE r_cursor_trigg_on CURSOR LOCAL FAST_FORWARD READ_ONLY FOR SELECT FORMATMESSAGE('ALTER TABLE [%s].[%s] ENABLE TRIGGER [%s];'    + CHAR(13), SCHEMA_NAME(b.[schema_id])   , OBJECT_NAME(t.parent_id), t.[Name]) AS stm FROM sys.triggers          t LEFT JOIN sys.tables  b ON b.[object_id] = t.parent_id WHERE t.is_disabled = 1   AND t.[type_desc] = 'SQL_TRIGGER'   AND OBJECT_NAME(t.parent_id) IS NOT NULL  OPEN r_cursor_trigg_on; FETCH NEXT FROM r_cursor_trigg_on INTO @stm;  WHILE @@FETCH_STATUS = 0 BEGIN   PRINT @stm;    BEGIN TRY     BEGIN TRANSACTION;       EXEC sys.sp_executesql @stmt = @stm;     COMMIT;   END TRY   BEGIN CATCH     SET @ERROR = ERROR_MESSAGE();     PRINT @ERROR;     IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION   END CATCH    FETCH NEXT FROM r_cursor_trigg_on   INTO @stm; END  CLOSE r_cursor_trigg_on; DEALLOCATE r_cursor_trigg_on;  SET @stm = '';  SELECT @stm += FORMATMESSAGE('ENABLE TRIGGER [%s] ON DATABASE;'    + CHAR(13), t.[Name])   FROM sys.triggers          t   WHERE t.is_disabled = 0     AND t.[type_desc] = 'SQL_TRIGGER'     AND OBJECT_NAME(t.parent_id) IS NULL;  PRINT @stm;  BEGIN TRY   BEGIN TRANSACTION;     EXEC sys.sp_executesql @stmt = @stm;   COMMIT; END TRY BEGIN CATCH   SET @ERROR = ERROR_MESSAGE();   PRINT @ERROR;   IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION END CATCH<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u0440\u0430\u043d\u0435\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0438<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">DECLARE r_cursor_fk_recover CURSOR LOCAL FAST_FORWARD READ_ONLY FOR SELECT t.referencing_object,        t.referenced_object,        t.constraint_name,        STRING_AGG (t.referencing_column_name, ',')         WITHIN GROUP (ORDER BY t.constraint_column_id ASC)          AS referencing_columns,        STRING_AGG (t.referenced_column_name, ',')         WITHIN GROUP (ORDER BY t.constraint_column_id ASC)          AS referenced_columns,        t.delete_referential_action,        t.update_referential_action FROM dbo.FKs AS t WHERE NOT EXISTS (SELECT 1 FROM sys.foreign_key_columns AS FK  WHERE t.constraint_name = CONCAT('[', OBJECT_NAME(FK.constraint_object_id)                                  , ']')) GROUP BY t.referencing_object,          t.referenced_object,          t.constraint_name,          t.delete_referential_action,          t.update_referential_action;  OPEN r_cursor_fk_recover; FETCH NEXT FROM r_cursor_fk_recover INTO @referencing_object    , @referenced_object    , @constraint_name    , @referencing_columns    , @referenced_columns    , @delete_referential_action    , @update_referential_action;  WHILE @@FETCH_STATUS = 0 BEGIN     SET @stm = CONCAT('ALTER TABLE ', @referencing_object     ,' WITH CHECK ADD  CONSTRAINT ', @constraint_name,     ' FOREIGN KEY(', @referencing_columns, ') REFERENCES '     , @referenced_object, ' (', @referenced_columns, ') '     , CASE         WHEN @delete_referential_action = 1           THEN 'ON DELETE CASCADE '         WHEN @delete_referential_action = 2           THEN 'ON DELETE SET NULL '         ELSE ''       END     , CASE         WHEN @update_referential_action = 1           THEN 'ON UPDATE CASCADE '         WHEN @update_referential_action = 2           THEN 'ON UPDATE SET NULL '         ELSE ''       END     , '; '     , 'ALTER TABLE ', @referencing_object, ' CHECK CONSTRAINT '     , @constraint_name, '; ');      PRINT @stm;      BEGIN TRY       BEGIN TRANSACTION;         EXEC sys.sp_executesql @stmt = @stm;       COMMIT;     END TRY     BEGIN CATCH       SET @ERROR = ERROR_MESSAGE();       PRINT @ERROR;       IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION     END CATCH      FETCH NEXT FROM r_cursor_fk_recover     INTO @referencing_object        , @referenced_object        , @constraint_name        , @referencing_columns        , @referenced_columns        , @delete_referential_action        , @update_referential_action; END  CLOSE r_cursor_fk_recover; DEALLOCATE r_cursor_fk_recover;<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412 \u043a\u043e\u043d\u0446\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0432\u0441\u0435\u0445 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<p><code>EXEC sys.sp_msforeachtable @commAND1=\"PRINT '?'\", @commAND2=\"ALTER TABLE ? WITH CHECK CHECK CONSTRAINT ALL\";<\/code><\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0434\u0435\u043b\u0430\u0435\u043c \u0432\u044b\u0432\u043e\u0434 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0435\u0440\u0435\u0437\u0430\u043b\u0438\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u044b:<\/p>\n<pre><code class=\"sql\">SELECT t.SchName,        t.TblName,        t.Cnt,        DATEDIFF(millisecond, t.StartMoment, t.FinishMoment) AS DiffMSec,        t.ErrorMsg FROM #tbl_res AS t ORDER BY t.SchName ASC, t.TblName ASC;<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SET NOCOUNT OFF;  DECLARE @DB       VARCHAR(250) = QUOTENAME(DB_NAME()),         @DBMaster VARCHAR(255) = '\u0411\u0414-\u043c\u0430\u0441\u0442\u0435\u0440',                 @ERROR    VARCHAR(MAX);  DECLARE @HistoryLimited            bit = 1,         @table_name                nvarchar(255),         @is_identity               int = 0,         @stm                       nvarchar(max) = '',         @cols                      nvarchar(max) = '',         @IsNOTInsert               bit,         @schema_name               nvarchar(255),         @col_name_identity         nvarchar(255),         @referencing_object        nvarchar(255),         @referenced_object         nvarchar(255),         @constraint_name           nvarchar(255),         @referencing_columns       nvarchar(max),         @referenced_columns        nvarchar(max),         @rules                     nvarchar(max),         @key_cols                  nvarchar(max),         @StartMoment               DATETIME2,         @FinishMoment              DATETIME2,         @delete_referential_action INT,         @update_referential_action INT,         @max_row_insert            INT = 100000,         @isClearTableFKs           BIT = 1,         @RowCount                  BIGINT = 1,         @WhileDelCount             INT = 0;         ;  DECLARE @cnt TABLE (cnt BIGINT NOT NULL);  DROP TABLE IF EXISTS #tbl_res;  CREATE TABLE #tbl_res (                          SchName       NVARCHAR(255) NOT NULL,                          TblName       NVARCHAR(255) NOT NULL,                          StartMoment   DATETIME2     NOT NULL,                          FinishMoment  DATETIME2     NOT NULL,                          Cnt           BIGINT        NOT NULL,                          ErrorMsg      NVARCHAR(MAX) NULL                        );  EXEC sys.sp_msforeachtable \"ALTER TABLE ? NOCHECK CONSTRAINT ALL\";  DECLARE r_cursor_trigg_off CURSOR LOCAL FAST_FORWARD READ_ONLY FOR SELECT FORMATMESSAGE('ALTER TABLE [%s].[%s] DISABLE TRIGGER [%s];'    + CHAR(13), SCHEMA_NAME(b.[schema_id]), OBJECT_NAME(t.parent_id)   , t.[Name]) AS stm FROM sys.triggers          t LEFT JOIN sys.tables  b ON b.object_id = t.parent_id WHERE t.is_disabled = 0   AND t.type_desc = 'SQL_TRIGGER'   AND OBJECT_NAME(t.parent_id) IS NOT NULL ORDER BY SCHEMA_NAME(b.[schema_id]) ASC,          OBJECT_NAME(t.parent_id) ASC;  OPEN r_cursor_trigg_off; FETCH NEXT FROM r_cursor_trigg_off INTO @stm;  WHILE @@FETCH_STATUS = 0 BEGIN   PRINT @stm;    BEGIN TRY     BEGIN TRANSACTION;       EXEC sys.sp_executesql @stmt = @stm;     COMMIT;   END TRY   BEGIN CATCH     SET @ERROR = ERROR_MESSAGE();     PRINT @ERROR;     IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION   END CATCH      FETCH NEXT FROM r_cursor_trigg_off   INTO @stm; END  CLOSE r_cursor_trigg_off; DEALLOCATE r_cursor_trigg_off;  SET @stm = '';  SELECT @stm += FORMATMESSAGE('DISABLE TRIGGER [%s] ON DATABASE;'   + CHAR(13), t.[Name]) FROM sys.triggers          t LEFT JOIN sys.tables  b ON b.[object_id] = t.parent_id    WHERE t.is_disabled = 0      AND t.[type_desc] = 'SQL_TRIGGER'      AND OBJECT_NAME(t.parent_id) IS NULL;  PRINT @stm;  BEGIN TRY   BEGIN TRANSACTION;     EXEC sys.sp_executesql @stmt = @stm;   COMMIT; END TRY BEGIN CATCH   SET @ERROR = ERROR_MESSAGE();   PRINT @ERROR;   IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION END CATCH  DROP TABLE IF EXISTS #tbls; CREATE TABLE #tbls (                     [name]      NVARCHAR(255) NOT NULL,                     sch_name    NVARCHAR(255) NOT NULL,                     IsNOTInsert BIT           NOT NULL                    );  INSERT INTO #tbls (                     [name],                     sch_name,                     IsNOTInsert                   )   SELECT t.[name],          SCHEMA_NAME(t.[schema_id]) AS sch_name,          --\u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c           --\u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u043b\u0438 \u043d\u0435\u0442          --\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0443\u0436\u043d\u043e (0-\u0434\u0430, 1-\u043d\u0435\u0442)          0 AS IsNOTInsert       FROM sys.tables AS t       --\u0432 \u0444\u0438\u043b\u044c\u0442\u0440\u0435 \u0437\u0430\u0434\u0430\u0435\u043c \u043a\u0430\u043a\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0431\u0440\u0430\u0442\u044c \u0432 \u0440\u0430\u0441\u0447\u0435\u0442       --(\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u0430\u043a\u0438\u0435 \u043d\u0435 \u0431\u0440\u0430\u0442\u044c \u0432 \u0440\u0430\u0441\u0447\u0435\u0442)       WHERE t.[name] NOT LIKE 'unused%'         AND t.[name] NOT LIKE 'removed%'         AND t.[name] NOT LIKE 'migrated%'         AND t.[name] NOT LIKE 'migration%'         AND t.[name] NOT LIKE 'sysdiag%'         AND t.[name] NOT LIKE 'test%'         AND t.[name] NOT LIKE 'tmp%'         AND t.[name] NOT LIKE '%_cache'         AND t.[name] NOT IN ('FKs');  IF NOT EXISTS (SELECT 1 FROM sys.tables AS t   WHERE t.[name]= 'FKs' AND t.[schema_id] = SCHEMA_ID('dbo')) BEGIN   CREATE TABLE dbo.FKs (                       referencing_object      NVARCHAR(255) NOT NULL,                       constraint_column_id    INT NOT NULL,                       referencing_column_name NVARCHAR(255) NOT NULL,                       referenced_object       NVARCHAR(255) NOT NULL,                       referenced_column_name  NVARCHAR(255) NOT NULL,                       constraint_name         NVARCHAR(255) NOT NULL,                       delete_referential_action INT NOT NULL,                       update_referential_action INT NOT NULL                     ); END ELSE IF (@isClearTableFKs = 1) BEGIN   TRUNCATE TABLE dbo.FKs; END  INSERT INTO dbo.FKs (               referencing_object,               constraint_column_id,               referencing_column_name,               referenced_object,               referenced_column_name,               constraint_name,               delete_referential_action,               update_referential_action              ) SELECT CONCAT('[', SCHEMA_NAME(P.[schema_id]), '].['   , OBJECT_NAME(FK.parent_object_id), ']') AS referencing_object,   FK.constraint_column_id, CONCAT('[', COL_NAME(FK.parent_object_id   , FK.parent_column_id), ']') AS referencing_column_name, CONCAT('[', SCHEMA_NAME(R.[schema_id]), '].['   , OBJECT_NAME(FK.referenced_object_id), ']') AS referenced_object, CONCAT('[', COL_NAME(FK.referenced_object_id   , FK.referenced_column_id), ']') AS referenced_column_name, CONCAT('[', OBJECT_NAME(FK.constraint_object_id)   , ']') AS constraint_name, FKK.delete_referential_action, FKK.update_referential_action FROM sys.foreign_key_columns AS FK INNER JOIN sys.foreign_keys AS FKK ON FKK.[object_id]                                        = FK.constraint_object_id INNER JOIN sys.tables AS P ON P.[object_id] = FK.parent_object_id INNER JOIN sys.tables AS R ON R.[object_id] = FK.referenced_object_id WHERE NOT EXISTS (SELECT 1 FROM dbo.FKs AS t0    WHERE t0.constraint_name = CONCAT('['                             , OBJECT_NAME(FK.constraint_object_id), ']'));    DELETE FROM trg FROM dbo.FKs AS trg WHERE NOT EXISTS (                   SELECT 1                   FROM #tbls AS src                   WHERE trg.referencing_object = CONCAT('[', src.sch_name                           , '].[', src.[name], ']')                      OR trg.referenced_object  = CONCAT('[', src.sch_name                           , '].[', src.[name], ']')                  )  DECLARE r_cursor_fk_drop CURSOR LOCAL FAST_FORWARD READ_ONLY FOR SELECT t.referencing_object,        t.referenced_object,        t.constraint_name FROM dbo.FKs AS t WHERE EXISTS (SELECT 1 FROM sys.foreign_key_columns AS FK    WHERE t.constraint_name = CONCAT('['                             , OBJECT_NAME(FK.constraint_object_id), ']')) GROUP BY t.referencing_object,          t.referenced_object,          t.constraint_name;  OPEN r_cursor_fk_drop; FETCH NEXT FROM r_cursor_fk_drop INTO @referencing_object,      @referenced_object,      @constraint_name  WHILE @@FETCH_STATUS = 0 BEGIN   SET @stm = CONCAT('ALTER TABLE ', @referencing_object     , ' DROP CONSTRAINT ', @constraint_name, ';');      PRINT @stm;      BEGIN TRY     BEGIN TRANSACTION;       EXEC sys.sp_executesql @stmt = @stm;     COMMIT;   END TRY   BEGIN CATCH     SET @ERROR = ERROR_MESSAGE();     PRINT @ERROR;     IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION   END CATCH      FETCH NEXT FROM r_cursor_fk_drop   INTO @referencing_object,        @referenced_object,        @constraint_name; END  CLOSE r_cursor_fk_drop; DEALLOCATE r_cursor_fk_drop;  DECLARE r_cursor CURSOR LOCAL FAST_FORWARD READ_ONLY FOR SELECT t.[name],        t.sch_name,        t.IsNOTInsert   FROM #tbls AS t   ORDER BY t.[name] ASC;  OPEN r_cursor; FETCH NEXT FROM r_cursor INTO @table_name,      @schema_name,      @IsNOTInsert;  WHILE @@FETCH_STATUS = 0 BEGIN   SET @cols = '';   SET @is_identity = 0;   SET @col_name_identity = NULL;      SET @stm = CONCAT('TRUNCATE TABLE ', @DB                     , '.[', @schema_name, '].[', @table_name, ']');      PRINT @stm;      BEGIN TRY     BEGIN TRANSACTION;       EXEC sys.sp_executesql @stmt = @stm;     COMMIT;   END TRY   BEGIN CATCH     SET @ERROR = ERROR_MESSAGE();     PRINT @ERROR;     IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION   END CATCH      IF (@IsNOTInsert = 0)   BEGIN     SELECT @cols        = @cols + CASE WHEN @cols = ''                    THEN c.[name] ELSE ',' + c.name END,            @is_identity = @is_identity + c.is_identity,            @col_name_identity = CASE WHEN (c.is_identity = 1)                      THEN c.[name] ELSE @col_name_identity END       FROM sys.tables t,            sys.columns c       WHERE t.[object_id] = c.[object_id]         AND t.[name]      = @table_name         AND c.is_computed = 0;      SET @stm = '';      IF @is_identity &gt; 0 SET @stm = CONCAT('SET IDENTITY_INSERT '           , @DB, '.[', @schema_name, '].[', @table_name, '] ON');      SET @stm = CONCAT(@stm, ' INSERT INTO ', @DB, '.['               , @schema_name, '].[', @table_name                       , '](', @cols, ') SELECT ', @cols                       , ' FROM [',@DBMaster,'].['                       , @schema_name, '].['                       , @table_name, '] WITH(NOLOCK) ');      --\u0437\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u043c\u0438     IF @HistoryLimited = 1     BEGIN       IF @table_name LIKE '%History'           SET @stm = CONCAT(@stm         , ' WHERE ChangeDateTime &gt; DATEADD   (month, -1, SYSDATETIME()) ');     END      IF @is_identity &gt; 0 SET @stm = CONCAT(@stm, ' SET IDENTITY_INSERT '         , @DB, '.[', @schema_name, '].[', @table_name, '] OFF');     IF @is_identity &gt; 0 SET @stm = CONCAT(@stm, ' DBCC CHECKIDENT (\"'         , @table_name, '\")');      SET @StartMoment = SYSDATETIME();     SET @ERROR = NULL;      PRINT @stm;      BEGIN TRY       BEGIN TRANSACTION;         EXEC sys.sp_executesql @stmt = @stm;       COMMIT;     END TRY     BEGIN CATCH       SET @ERROR = ERROR_MESSAGE();       PRINT @ERROR;       IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION     END CATCH      SET @FinishMoment = SYSDATETIME();      SET @stm = CONCAT('SELECT COUNT_BIG(*) FROM ', '[', @schema_name         , '].[', @table_name, '] WITH (NOLOCK);');      DELETE FROM @cnt;      INSERT INTO @cnt (cnt)     EXEC sys.sp_executesql @stmt = @stm;      INSERT INTO #tbl_res (               SchName,               TblName,               StartMoment,               FinishMoment,               Cnt,               ErrorMsg              )     SELECT @schema_name,            @table_name,            @StartMoment,            @FinishMoment,            COALESCE((SELECT SUM(cnt) FROM @cnt), 0) AS Cnt,            @ERROR;   END    FETCH NEXT FROM r_cursor   INTO @table_name,        @schema_name,        @IsNOTInsert; END CLOSE r_cursor; DEALLOCATE r_cursor;  WHILE (@RowCount &gt; 0) BEGIN   SET @RowCount = 0;   SET @WhileDelCount += 1;    DECLARE r_cursor_fk_corr CURSOR LOCAL FAST_FORWARD READ_ONLY FOR   SELECT t.referencing_object,          t.referenced_object,          t.constraint_name,          STRING_AGG (CONCAT('(trg.', t.referencing_column_name           , '=src.', t.referenced_column_name, ')'), ' AND ')            WITHIN GROUP (ORDER BY t.constraint_column_id ASC) AS rules,          STRING_AGG (CONCAT('(trg.', t.referencing_column_name           , ' IS NOT NULL)'), ' AND ')            WITHIN GROUP (ORDER BY t.constraint_column_id ASC) AS key_cols   FROM dbo.FKs AS t   GROUP BY t.referencing_object,            t.referenced_object,            t.constraint_name;    OPEN r_cursor_fk_corr;   FETCH NEXT FROM r_cursor_fk_corr   INTO @referencing_object      , @referenced_object      , @constraint_name      , @rules      , @key_cols;    WHILE @@FETCH_STATUS = 0   BEGIN       SET @stm = CONCAT('DELETE FROM trg FROM ', @referencing_object         ,' AS trg WHERE ', @key_cols, ' AND NOT EXISTS (SELECT 1 FROM '         , @referenced_object,       ' AS src WITH (NOLOCK) WHERE ', @rules, ');');        PRINT @stm;        BEGIN TRY         BEGIN TRANSACTION;           EXEC sys.sp_executesql @stmt = @stm;            SET @RowCount += @@ROWCOUNT;         COMMIT;       END TRY       BEGIN CATCH         SET @ERROR = ERROR_MESSAGE();         PRINT @ERROR;         IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION       END CATCH        FETCH NEXT FROM r_cursor_fk_corr       INTO @referencing_object          , @referenced_object          , @constraint_name          , @rules          , @key_cols;   END    CLOSE r_cursor_fk_corr;   DEALLOCATE r_cursor_fk_corr; END  PRINT CONCAT('WHILE DELETE COUNT: ', @WhileDelCount);  DECLARE r_cursor_stat CURSOR LOCAL FAST_FORWARD READ_ONLY FOR SELECT CONCAT('UPDATE STATISTICS ', @DB, '.[', t.sch_name, '].['   , t.[name], '] WITH FULLSCAN;') AS stm FROM #tbls AS t;  OPEN r_cursor_stat; FETCH NEXT FROM r_cursor_stat INTO @stm;  WHILE @@FETCH_STATUS = 0 BEGIN   PRINT @stm;    BEGIN TRY     BEGIN TRANSACTION;       EXEC sys.sp_executesql @stmt = @stm;     COMMIT;   END TRY   BEGIN CATCH     SET @ERROR = ERROR_MESSAGE();     PRINT @ERROR;     IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION   END CATCH    FETCH NEXT FROM r_cursor_stat   INTO @stm END  CLOSE r_cursor_stat; DEALLOCATE r_cursor_stat;  DECLARE r_cursor_trigg_on CURSOR LOCAL FAST_FORWARD READ_ONLY FOR SELECT FORMATMESSAGE('ALTER TABLE [%s].[%s] ENABLE TRIGGER [%s];'    + CHAR(13), SCHEMA_NAME(b.[schema_id]), OBJECT_NAME(t.parent_id)                      , t.[Name]) AS stm FROM sys.triggers          t LEFT JOIN sys.tables  b ON b.[object_id] = t.parent_id WHERE t.is_disabled = 1   AND t.[type_desc] = 'SQL_TRIGGER'   AND OBJECT_NAME(t.parent_id) IS NOT NULL  OPEN r_cursor_trigg_on; FETCH NEXT FROM r_cursor_trigg_on INTO @stm;  WHILE @@FETCH_STATUS = 0 BEGIN   PRINT @stm;    BEGIN TRY     BEGIN TRANSACTION;       EXEC sys.sp_executesql @stmt = @stm;     COMMIT;   END TRY   BEGIN CATCH     SET @ERROR = ERROR_MESSAGE();     PRINT @ERROR;     IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION   END CATCH    FETCH NEXT FROM r_cursor_trigg_on   INTO @stm; END  CLOSE r_cursor_trigg_on; DEALLOCATE r_cursor_trigg_on;  SET @stm = '';  SELECT @stm += FORMATMESSAGE('ENABLE TRIGGER [%s] ON DATABASE;'                               + CHAR(13), t.[Name])   FROM sys.triggers          t   WHERE t.is_disabled = 0     AND t.[type_desc] = 'SQL_TRIGGER'     AND OBJECT_NAME(t.parent_id) IS NULL;  PRINT @stm;  BEGIN TRY   BEGIN TRANSACTION;     EXEC sys.sp_executesql @stmt = @stm;   COMMIT; END TRY BEGIN CATCH   SET @ERROR = ERROR_MESSAGE();   PRINT @ERROR;   IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION END CATCH  DECLARE r_cursor_fk_recover CURSOR LOCAL FAST_FORWARD READ_ONLY FOR SELECT t.referencing_object,        t.referenced_object,        t.constraint_name,        STRING_AGG (t.referencing_column_name, ',')          WITHIN GROUP (ORDER BY t.constraint_column_id ASC)          AS referencing_columns,        STRING_AGG (t.referenced_column_name, ',')          WITHIN GROUP (ORDER BY t.constraint_column_id ASC)          AS referenced_columns,        t.delete_referential_action,        t.update_referential_action FROM dbo.FKs AS t WHERE NOT EXISTS (SELECT 1 FROM sys.foreign_key_columns AS FK    WHERE t.constraint_name = CONCAT('['                           , OBJECT_NAME(FK.constraint_object_id), ']')) GROUP BY t.referencing_object,          t.referenced_object,          t.constraint_name,          t.delete_referential_action,          t.update_referential_action;  OPEN r_cursor_fk_recover; FETCH NEXT FROM r_cursor_fk_recover INTO @referencing_object    , @referenced_object    , @constraint_name    , @referencing_columns    , @referenced_columns    , @delete_referential_action    , @update_referential_action;  WHILE @@FETCH_STATUS = 0 BEGIN     SET @stm = CONCAT('ALTER TABLE ', @referencing_object                       ,' WITH CHECK ADD  CONSTRAINT ', @constraint_name,     ' FOREIGN KEY(', @referencing_columns, ') REFERENCES '                       , @referenced_object, ' (', @referenced_columns, ') '     , CASE         WHEN @delete_referential_action = 1           THEN 'ON DELETE CASCADE '         WHEN @delete_referential_action = 2           THEN 'ON DELETE SET NULL '         ELSE ''       END     , CASE         WHEN @update_referential_action = 1           THEN 'ON UPDATE CASCADE '         WHEN @update_referential_action = 2           THEN 'ON UPDATE SET NULL '         ELSE ''       END     , '; '     , 'ALTER TABLE ', @referencing_object, ' CHECK CONSTRAINT '                       , @constraint_name, '; ');      PRINT @stm;      BEGIN TRY       BEGIN TRANSACTION;         EXEC sys.sp_executesql @stmt = @stm;       COMMIT;     END TRY     BEGIN CATCH       SET @ERROR = ERROR_MESSAGE();       PRINT @ERROR;       IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION     END CATCH      FETCH NEXT FROM r_cursor_fk_recover     INTO @referencing_object        , @referenced_object        , @constraint_name        , @referencing_columns        , @referenced_columns        , @delete_referential_action        , @update_referential_action; END  CLOSE r_cursor_fk_recover; DEALLOCATE r_cursor_fk_recover;  EXEC sys.sp_msforeachtable @commAND1=\"PRINT '?'\" , @commAND2=\"ALTER TABLE ? WITH CHECK CHECK CONSTRAINT ALL\";  SELECT t.SchName,        t.TblName,        t.Cnt,        DATEDIFF(millisecond, t.StartMoment, t.FinishMoment) AS DiffMSec,        t.ErrorMsg FROM #tbl_res AS t ORDER BY t.SchName ASC, t.TblName ASC;<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043c\u044b \u043f\u0440\u043e\u0433\u043d\u0430\u043b\u0438 \u0435\u0433\u043e \u043d\u0430\u00a0\u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u0411\u0414:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/618\/fff\/ec2\/618fffec25f0a48c865a066df8547a96.png\" width=\"744\" height=\"144\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/618\/fff\/ec2\/618fffec25f0a48c865a066df8547a96.png\"\/><\/figure>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0435\u0437\u00a0\u043e\u0448\u0438\u0431\u043e\u043a.<\/p>\n<p>\u0412\u0430\u0436\u043d\u043e \u0438 \u0442\u043e, \u0447\u0442\u043e\u00a0\u043f\u0440\u0438\u00a0\u043e\u0431\u044a\u0435\u043c\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0\u0411\u0414\u2011\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0435 \u043e\u043a\u043e\u043b\u043e 100\u00a0\u0413\u0411 (\u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u0430\u0431\u043b\u0438\u0446 \u0432\u00a0\u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u0434\u043e 100\u00a0\u043c\u043b\u043d \u0437\u0430\u043f\u0438\u0441\u0435\u0439), \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u043e 18\u00a0\u2014 19\u00a0\u043c\u0438\u043d\u0443\u0442, \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0437\u0430\u043b\u0438\u0432\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446.<\/p>\n<h3>\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0441\u043a\u0440\u0438\u043f\u0442\u0430<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u00a0\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u044f\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0412\u00a0\u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0446\u0435\u043b\u044b\u0439 \u0441\u0442\u0435\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432:<\/p>\n<ul>\n<li>\n<p>sys.sp_msforeachtable\u00a0\u2014 \u043d\u0435\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0445\u0440\u0430\u043d\u0438\u043c\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0432\u00a0SQL Server, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0442\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 T\u2011SQL \u043a\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0432\u00a0\u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/learn.microsoft.com\/ru-ru\/sql\/relational-databases\/system-catalog-views\/sys-triggers-transact-sql?view=sql-server-ver16\">sys.triggers<\/a>\u00a0\u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u00a0\u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430\u0445 \u0432\u00a0\u0411\u0414;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/learn.microsoft.com\/ru-ru\/sql\/relational-databases\/system-catalog-views\/sys-tables-transact-sql?view=sql-server-ver16\">sys.tables<\/a>\u00a0\u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0432\u00a0\u0411\u0414;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/learn.microsoft.com\/ru-ru\/sql\/relational-databases\/system-stored-procedures\/sp-executesql-transact-sql?view=sql-server-ver16\">sys.sp_executesql<\/a>\u00a0\u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0430\u044f \u0445\u0440\u0430\u043d\u0438\u043c\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0434\u043b\u044f\u00a0\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 Transact\u2011SQL \u0438\u043b\u0438\u00a0\u043f\u0430\u043a\u0435\u0442\u0430, \u0432\u00a0\u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/learn.microsoft.com\/ru-ru\/sql\/relational-databases\/system-catalog-views\/sys-foreign-key-columns-transact-sql?view=sql-server-ver16\">sys.foreign_key_columns<\/a>\u00a0\u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u00a0\u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043a\u043b\u044e\u0447\u0435\u0439;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/learn.microsoft.com\/ru-ru\/sql\/relational-databases\/system-catalog-views\/sys-foreign-keys-transact-sql?view=sql-server-ver16\">sys.foreign_keys<\/a>\u00a0\u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u00a0\u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043a\u043b\u044e\u0447\u0430\u0445;<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/learn.microsoft.com\/ru-ru\/sql\/relational-databases\/system-catalog-views\/sys-columns-transact-sql?view=sql-server-ver16\">sys.columns<\/a>\u00a0\u2014 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u00a0\u043a\u043e\u043b\u043e\u043d\u043a\u0430\u0445.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0412\u043c\u0435\u0441\u0442\u043e \u0432\u044b\u0432\u043e\u0434\u043e\u0432<\/h3>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0437\u0430\u043b\u0438\u0432\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446 \u0432\u00a0\u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445\u00a0\u2014 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043a\u0440\u0443\u043f\u0443\u043b\u0435\u0437\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0435\u0437\u00a0\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043b\u0435\u0433\u043a\u043e \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0441 \u00ab\u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u043c\u0438 \u043a\u0430\u043c\u043d\u044f\u043c\u0438\u00bb \u0438 \u043d\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f\u00a0\u2014 must have \u0434\u043b\u044f\u00a0\u043b\u044e\u0431\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0433\u0434\u0435 \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u0433\u043e\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0436\u0434\u0443 \u0441\u0440\u0435\u0434\u0430\u043c\u0438. \u041f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442\u00a0\u2014 \u043e\u0434\u0438\u043d \u0438\u0437\u00a0\u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0442\u0430\u043a\u043e\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438. <\/p>\n<p>\u0411\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u00a0\u2014 \u043d\u0435 \u00ab\u0441\u0435\u0440\u0435\u0431\u0440\u044f\u043d\u0430\u044f \u043f\u0443\u043b\u044f\u00bb. \u041d\u043e\u00a0\u043d\u0430\u0448 \u043e\u043f\u044b\u0442 \u0438 \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438, \u0447\u0442\u043e\u00a0\u043e\u043d\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0438 \u043d\u0430\u0434\u0435\u0436\u043d\u043e \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u00a0\u043f\u0435\u0440\u0435\u043d\u043e\u0441\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u0441\u0440\u0435\u0434\u0430\u043c\u0438.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/874342\/\"> https:\/\/habr.com\/ru\/articles\/874342\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><\/figure>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437\u00a0\u043e\u0434\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u044b \u0432\u00a0\u0434\u0440\u0443\u0433\u0443\u044e\u00a0\u2014 \u0437\u0430\u0434\u0430\u0447\u0430, \u0441\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f\u00a0\u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438\u0437\u00a0\u043f\u0440\u043e\u0434\u0430 \u0432\u00a0\u0441\u0440\u0435\u0434\u044b \u0434\u043b\u044f\u00a0\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0412\u043c\u0435\u0441\u0442\u0435 \u0441\u00a0\u0442\u0435\u043c, \u0442\u0430\u043a\u0430\u044f \u00ab\u043f\u0435\u0440\u0435\u0437\u0430\u043b\u0438\u0432\u043a\u0430\u00bb \u0442\u0430\u0431\u043b\u0438\u0446 \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043a\u0432\u0435\u0441\u0442, \u043f\u043e\u00a0\u0445\u043e\u0434\u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u043e\u00a0\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441\u00a0\u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u0438\u043c \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0443\u0447\u0448\u0435\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430.<\/p>\n<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0415\u0432\u0433\u0435\u043d\u0438\u0439 \u0413\u0440\u0438\u0431\u043a\u043e\u0432. \u042f \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0432\u00a0\u0446\u0435\u043d\u0442\u0440\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 VK. \u0412\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0434\u043d\u043e \u0438\u0437\u00a0\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043f\u0435\u0440\u0435\u0437\u0430\u043b\u0438\u0432\u043a\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438\u0437\u00a0\u043e\u0434\u043d\u043e\u0439 \u0411\u0414 \u0432\u00a0\u0434\u0440\u0443\u0433\u0443\u044e \u043d\u0430\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0435 MS SQL.<\/p>\n<h3>\u0422\u0438\u043f\u043e\u0432\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0435\u0440\u0435\u0437\u0430\u043b\u0438\u0432\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446 \u0432 \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u0432\u00a0\u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043b\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u00a0\u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0411\u0414 \u0438\u0437\u00a0\u043e\u0434\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u044b \u0432\u00a0\u0434\u0440\u0443\u0433\u0443\u044e, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u044b:<\/p>\n<ul>\n<li>\n<p>\u0434\u0435\u043b\u0430\u044e\u0442 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e \u0441\u00a0\u043f\u0440\u043e\u0434\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442 \u0431\u044d\u043a\u0430\u043f \u043d\u0430\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439, \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442 \u043e\u0431\u0435\u0437\u043b\u0438\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0438\u043b\u0438\u00a0\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u0431\u044d\u043a\u0430\u043f \u0441\u00a0\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445;<\/p>\n<\/li>\n<li>\n<p>\u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e \u0432\u00a0\u043d\u0443\u0436\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f\u00a0\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f).<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u0432\u0435\u0441\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u00a0\u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u0438\u044e (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u0437 \u0432\u00a0\u0441\u0443\u0442\u043a\u0438 \u043d\u043e\u0447\u044c\u044e \u0438\u043b\u0438\u00a0\u0440\u0430\u0437 \u0432\u00a0\u043d\u0435\u0434\u0435\u043b\u044e \u043d\u0430\u00a0\u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445).<\/p>\n<p>\u041d\u043e\u00a0\u0443 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0435\u0441\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a: \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u044e \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043e\u00a0\u0432\u0441\u0435 \u0441\u0440\u0435\u0434\u044b\u00a0\u2014 \u0432\u0435\u0441\u044c\u043c\u0430 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0438 \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u0440\u043e\u0433\u043e\u0439 \u0432\u00a0\u043f\u043b\u0430\u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u00a0\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435 \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442 \u0447\u0438\u0441\u0442\u043a\u0438 \u043a\u0430\u043a\u00a0\u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0441\u0451, \u0447\u0442\u043e\u00a0\u0441\u0442\u0430\u0440\u0435\u0435 \u043e\u0434\u043d\u043e\u0433\u043e\u00a0\u043a\u0430\u043b\u0435\u043d\u0434\u0430\u0440\u043d\u043e\u0433\u043e \u0433\u043e\u0434\u0430), \u0442\u0430\u043a \u0438 \u043f\u043e\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044f\u043c. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043c\u0430 \u0411\u0414 \u0432\u00a0\u0434\u0435\u0441\u044f\u0442\u043a\u0438, \u0430\u00a0\u0442\u043e \u0438 \u0432\u00a0\u0441\u043e\u0442\u043d\u0438 \u0440\u0430\u0437.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u0434\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u0432\u00a0\u0441\u0440\u0435\u0434\u0430\u0445 \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0411\u0414, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043e\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435. \u041f\u0440\u0438\u0447\u0435\u043c\u00a0\u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0447\u0442\u043e\u0431\u044b\u00a0\u0431\u044b\u043b\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432\u00a0\u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u043a\u043e\u0433\u0434\u0430 \u0411\u0414 \u043d\u0435\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u00a0\u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u0437 \u0432\u00a0\u043d\u0435\u0434\u0435\u043b\u044e \u043d\u043e\u0447\u044c\u044e \u0438\u043b\u0438\u00a0\u043a\u0430\u0436\u0434\u0443\u044e \u043d\u043e\u0447\u044c.<\/p>\n<p>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432\u00a0\u0442\u0430\u043a\u0438\u0445 \u043a\u0435\u0439\u0441\u0430\u0445 \u0432\u0430\u0436\u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0437\u0430\u043b\u0438\u0432\u0430\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0411\u0414 \u0438\u0437\u00a0\u043e\u0434\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u044b \u0432\u00a0\u0434\u0440\u0443\u0433\u0443\u044e \u0431\u0435\u0437\u00a0\u0440\u0443\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0438 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u043c\u0435\u0448\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432.<\/p>\n<h3>\u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u0430<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043e\u0442\u00a0\u0442\u0435\u043e\u0440\u0438\u0438 \u043a\u00a0\u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0434\u0438\u043d \u0438\u0437\u00a0\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043f\u0435\u0440\u0435\u0437\u0430\u043b\u0438\u0432\u043a\u0438 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438\u0437\u00a0\u043e\u0434\u043d\u043e\u0439 \u0411\u0414 \u0432\u00a0\u0434\u0440\u0443\u0433\u0443\u044e \u043d\u0430\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0435 MS SQL. \u041f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u0441\u0440\u0430\u0437\u0443 \u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c\u0441\u044f \u0438 \u043f\u0440\u0438\u043c\u0435\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u0435, \u0447\u0442\u043e\u00a0\u043e\u0431\u0435 \u0411\u0414 \u043d\u0430\u00a0\u043e\u0434\u043d\u043e\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0435 \u0421\u0423\u0411\u0414\u00a0\u2014 \u0442\u043e \u0435\u0441\u0442\u044c, \u0411\u0414\u2011\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0443\u0436\u0435 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432\u00a0\u0442\u043e\u0439\u00a0\u0436\u0435 \u0421\u0423\u0411\u0414, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0446\u0435\u043b\u0435\u0432\u0430\u044f \u0411\u0414.<\/p>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c:<\/p>\n<ul>\n<li>\n<p>\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0441\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0441\u0435 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f\u00a0\u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0438, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u0445.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043f\u043e\u043b\u043d\u0443\u044e \u043e\u0447\u0438\u0441\u0442\u043a\u0443 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>TRUNCATE<\/code> \u0441\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0438\u0445 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0431\u0438\u0442\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043b\u0438\u0442\u044b\u0445 \u0432\u044b\u0448\u0435 \u0442\u0430\u0431\u043b\u0438\u0446.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u0441\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c \u043a\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<details class=\"spoiler\">\n<summary>\u0414\u043b\u044f\u00a0\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">SET NOCOUNT OFF;  DECLARE @DB       VARCHAR(250) = QUOTENAME(DB_NAME()),         @DBMaster VARCHAR(255) = '\u0411\u0414-\u043c\u0430\u0441\u0442\u0435\u0440',                       @ERROR    VARCHAR(MAX);    DECLARE @HistoryLimited           bit = 1,           @table_name               nvarchar(255),           @is_identity              int = 0,           @stm                      nvarchar(max) = '',           @cols                     nvarchar(max) = '',           @IsNOTInsert              bit,           @schema_name              nvarchar(255),           @col_name_identity        nvarchar(255),           @referencing_object       nvarchar(255),           @referenced_object        nvarchar(255),           @constraint_name          nvarchar(255),           @referencing_columns      nvarchar(max),           @referenced_columns       nvarchar(max),           @rules                    nvarchar(max),           @key_cols                 nvarchar(max),           @StartMoment              DATETIME2,           @FinishMoment             DATETIME2,           @delete_referential_action INT,           @update_referential_action INT,           @max_row_insert           INT = 100000,           @isClearTableFKs          BIT = 1,           @RowCount                 BIGINT = 1,           @WhileDelCount            INT = 0;           ;    DECLARE @cnt TABLE (cnt BIGINT NOT NULL);    DROP TABLE IF EXISTS #tbl_res;    CREATE TABLE #tbl_res (                            SchName       NVARCHAR(255) NOT NULL,                            TblName       NVARCHAR(255) NOT NULL,                            StartMoment   DATETIME2     NOT NULL,                            FinishMoment  DATETIME2     NOT NULL,                            Cnt           BIGINT        NOT NULL,                            ErrorMsg      NVARCHAR(MAX) NULL                          );<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0417\u0434\u0435\u0441\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u043b\u0435\u0435 \u0432\u00a0\u0441\u043a\u0440\u0438\u043f\u0442\u0435, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u0442\u0430\u0431\u043b\u0438\u0447\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u0438\u0442\u043e\u0433 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0435\u0440\u0435\u0437\u0430\u043b\u0438\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u00a0\u0442\u0430\u0439\u043c\u0438\u043d\u0433\u043e\u043c.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432\u0441\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0432\u00a0\u0411\u0414. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<strong> <\/strong><code>EXEC sys.sp_msforeachtable \"ALTER TABLE ? NOCHECK CONSTRAINT ALL\"<\/code><\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432\u0441\u0435 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b \u0411\u0414<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">DECLARE r_cursor_trigg_off CURSOR LOCAL FAST_FORWARD READ_ONLY FOR SELECT FORMATMESSAGE('ALTER TABLE [%s].[%s] DISABLE TRIGGER [%s];'      + CHAR(13)      , SCHEMA_NAME(b.[schema_id])      , OBJECT_NAME(t.parent_id)      , t.[Name]) AS stm         FROM sys.triggers          t         LEFT JOIN sys.tables  b ON b.object_id = t.parent_id         WHERE t.is_disabled = 0           AND t.type_desc = 'SQL_TRIGGER'           AND OBJECT_NAME(t.parent_id) IS NOT NULL         ORDER BY SCHEMA_NAME(b.[schema_id]) ASC,                  OBJECT_NAME(t.parent_id) ASC;      OPEN r_cursor_trigg_off;     FETCH NEXT FROM r_cursor_trigg_off     INTO @stm;      WHILE @@FETCH_STATUS = 0     BEGIN       PRINT @stm;        BEGIN TRY         BEGIN TRANSACTION;           EXEC sys.sp_executesql @stmt = @stm;         COMMIT;       END TRY       BEGIN CATCH         SET @ERROR = ERROR_MESSAGE();         PRINT @ERROR;         IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION       END CATCH              FETCH NEXT FROM r_cursor_trigg_off       INTO @stm;     END      CLOSE r_cursor_trigg_off;     DEALLOCATE r_cursor_trigg_off;      SET @stm = '';      SELECT @stm += FORMATMESSAGE('DISABLE TRIGGER [%s] ON DATABASE;'                  + CHAR(13), t.[Name])     FROM sys.triggers          t     LEFT JOIN sys.tables  b ON b.[object_id] = t.parent_id        WHERE t.is_disabled = 0          AND t.[type_desc] = 'SQL_TRIGGER'          AND OBJECT_NAME(t.parent_id) IS NULL;      PRINT @stm;      BEGIN TRY       BEGIN TRANSACTION;         EXEC sys.sp_executesql @stmt = @stm;       COMMIT;     END TRY     BEGIN CATCH       SET @ERROR = ERROR_MESSAGE();       PRINT @ERROR;       IF (@@TRANCOUNT &gt; 0) ROLLBACK TRANSACTION     END CATCH<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0414\u0430\u043b\u0435\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">DROP TABLE IF EXISTS #tbls; CREATE TABLE #tbls (                     [name]      NVARCHAR(255) NOT NULL,                     sch_name    NVARCHAR(255) NOT NULL,                     IsNOTInsert BIT           NOT NULL                    );  INSERT INTO #tbls (                     [name],                     sch_name,                     IsNOTInsert                   )   SELECT t.[name],          SCHEMA_NAME(t.[schema_id]) AS sch_name,          --\u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c          --\u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043d\u0430\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u043b\u0438 \u043d\u0435\u0442          --\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0443\u0436\u043d\u043e (0-\u0434\u0430, 1-\u043d\u0435\u0442)          0 AS IsNOTInsert       FROM sys.tables AS t       --\u0432 \u0444\u0438\u043b\u044c\u0442\u0440\u0435 \u0437\u0430\u0434\u0430\u0435\u043c \u043a\u0430\u043a\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0431\u0440\u0430\u0442\u044c \u0432 \u0440\u0430\u0441\u0447\u0435\u0442       --(\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u0430\u043a\u0438\u0435 \u043d\u0435 \u0431\u0440\u0430\u0442\u044c \u0432 \u0440\u0430\u0441\u0447\u0451\u0442)       WHERE t.[name] NOT LIKE 'unused%'         AND t.[name] NOT LIKE 'removed%'         AND t.[name] NOT LIKE 'migrated%'         AND t.[name] NOT LIKE 'migration%'         AND t.[name] NOT LIKE 'sysdiag%'         AND t.[name] NOT LIKE 'test%'         AND t.[name] NOT LIKE 'tmp%'         AND t.[name] NOT LIKE '%_cache'         AND t.[name] NOT IN ('FKs');<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0431\u0435\u0440\u0435\u043c \u0432\u0441\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0438\u0445 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 dbo.FKs, \u0437\u0430\u0442\u0435\u043c \u2014 \u0443\u0434\u0430\u043b\u0438\u043c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"sql\">IF NOT EXISTS (SELECT 1 FROM sys.tables AS t                          WHERE t.[name]= 'FKs'                            AND t.[schema_id] = SCHEMA_ID('dbo'))     BEGIN       CREATE TABLE dbo.FKs (                           referencing_object      NVARCHAR(255) NOT NULL,                           constraint_column_id    INT NOT NULL,                           referencing_column_name NVARCHAR(255) NOT NULL,                           referenced_object       NVARCHAR(255) NOT NULL,                           referenced_column_name  NVARCHAR(255) NOT NULL,                           constraint_name         NVARCHAR(255) NOT NULL,                           delete_referential_action INT NOT NULL,                           update_referential_action INT NOT NULL                         );     END     ELSE IF (@isClearTableFKs = 1)     BEGIN       TRUNCATE TABLE dbo.FKs;     END      INSERT INTO dbo.FKs (                   referencing_object,                   constraint_column_id,                   referencing_column_name,                   referenced_object,                   referenced_column_name,                   constraint_name,                   delete_referential_action,                   update_referential_action                  )     SELECT CONCAT('[', SCHEMA_NAME(P.[schema_id]), '].['             , OBJECT_NAME(FK.parent_object_id), ']') AS referencing_object,     FK.constraint_column_id,     CONCAT('['     , COL_NAME(FK.parent_object_id, FK.parent_column_id)            , ']') AS referencing_column_name,     CONCAT('['     , SCHEMA_NAME(R.[schema_id]), '].['     , OBJECT_NAME(FK.referenced_object_id)         , ']') AS referenced_object,     CONCAT('['            , COL_NAME(FK.referenced_object_id, FK.referenced_column_id)            , ']') AS referenced_column_name,     CONCAT('['            ,<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-445315","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/445315","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=445315"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/445315\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=445315"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=445315"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=445315"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}