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

Съхранени процедури/схема на DB в контрола на източника

Избираме да скриптираме всичко и това включва всички съхранени процедури и промени в схемата. Не са необходими инструменти за wysiwyg и фантастични програми за „синхронизиране“.

Промените в схемата са лесни, всичко, което трябва да направите, е да създадете и поддържате един файл за тази версия, включително всички промени в схемата и данните. Това става вашият скрипт за преобразуване от версия x на x+1. След това можете да го стартирате срещу производствено резервно копие и да го интегрирате във вашата „ежедневна компилация“, за да проверите дали работи без грешки. Обърнете внимание, че е важно да не променяте или изтривате вече написана схема/sql за зареждане на данни, тъй като можете да счупите всеки sql, написан по-късно.

-- change #1234
ALTER TABLE asdf ADD COLUMN MyNewID INT
GO

-- change #5678
ALTER TABLE asdf DROP COLUMN SomeOtherID
GO

За съхранени процедури избираме един файл за sproc и той използва формуляра drop/create. Всички съхранени процедури се пресъздават при внедряване. Недостатъкът е, че ако промяната е извършена извън контрола на източника, промяната се губи. В същото време това е вярно за всеки код, но вашият DBA'a трябва да е наясно с това. Това наистина спира хората извън екипа да се занимават с вашите съхранени процедури, тъй като техните промени се губят при надграждане.

Използвайки Sql сървър, синтаксисът изглежда така:

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[usp_MyProc]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [usp_MyProc]
GO

CREATE PROCEDURE [usp_MyProc]
(
    @UserID INT
)
AS

SET NOCOUNT ON

-- stored procedure logic.

SET NOCOUNT OFF

GO  

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

Като плюс към скриптирането на всичко, ще станете много по-добри в четенето и писането на SQL. Можете също така да направите целия този процес по-сложен, но това е основният формат за това как да контролирате източника на целия sql без специален софтуер.

допълнение:Рик е прав, че ще загубите разрешения за съхранени процедури с DROP/CREATE, така че може да се наложи да напишете друг скрипт, който да активира отново конкретни разрешения. Този скрипт за разрешение ще бъде последният, който ще се изпълнява. Нашият опит откри повече проблеми със семантиката на ALTER стихове DROP/CREATE. YMMV



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) Може ли някой да ми обясни това

  2. Пейджинг на базата на отместване/извличане (внедряване) в EntityFramework (с помощта на LINQ) за SQL Server 2008

  3. Намерете САМО главни букви в дума чрез IN SQL Server заявка

  4. Премахнете крайните нули от десетичната запетая в SQL Server

  5. как да разберете колко реда ще бъдат засегнати, преди да изпълните заявка в microsoft sql server 2008