Перевыполнимые сценарии SQL Server

Если ваше выражение каждый раз напоминает R + jX, вы можете создать следующий класс

class ComplexNumber(models.Model):
    real_number = models.FloatField('Real number part')
    img_number = models.FloatFoeld('Img number part')

    def __str__(self):
        return complex(self.real_number, self.img_number)

и обработать строку результата с помощью python , см. Здесь

Если вы иметь несколько реальных и img-частей, вы можете справиться с этим с помощью внешних ключей или полей ManyToMany. Это может зависеть от ваших потребностей.

12
задан 7 revs, 2 users 100% 3 April 2009 в 18:26
поделиться

8 ответов

Я думаю самая важная практика в обеспечении, что Ваши сценарии перевыполнимы, должен.... выполнить их против тестовой базы данных многократно после любых изменений в сценарии. Ошибки, с которыми Вы встречаетесь, должны сформировать Ваши методы.

Править

В ответ на Ваше редактирование на синтаксисе в целом я думаю, лучше избегать системных таблиц в пользу системных представлений, например.

if exists(Select 1 from information_schema.tables where table_name = 'sometable')
    drop sometable
go
if exists(Select 1 from information_schema.routines where 
specific_name  = 'someproc')
   drop someproc 
5
ответ дан 2 December 2019 в 19:55
поделиться

Для создания вещей легче, я настраиваю студию управления к объектам сценария как rerunnable

  1. Инструменты
  2. Опции
  3. Обозреватель объектов SQL Server
  4. Сценарии
  5. Опции сценариев объекта
  6. Включайте, ЕСЛИ не существует верный пункт
5
ответ дан 2 December 2019 в 19:55
поделиться

Я недавно нашел регистрацию для существования, которое я не знал, существовал, и мне понравилось оно, потому что это короче

IF OBJECT_ID('table_name') IS NOT NULL DROP TABLE table_name

прежде, я раньше использовал

IF EXISTS (SELECT * FROM information_schema.tables WHERE table_name = 'table_name') 
DROP TABLE table_name

Который я нашел полезным, потому что это немного более портативно (MySql, Пост-ГРЭС, и т.д.), принимая во внимание различия, конечно

3
ответ дан 2 December 2019 в 19:55
поделиться

Для поддержания схем посмотрите на инструмент миграции. Я думаю, что LiquiBase работал бы на SQL Server.

0
ответ дан 2 December 2019 в 19:55
поделиться

Добавить к Вашему списку:

  • Если Вы отбрасываете таблицы, которые существуют прежде, чем создать их снова, отбрасывают их зависимости сначала также и не забывают воссоздавать их после
  • Используя CREATE OR ALTER PROCEDURE вместо CREATE PROCEDURE или ALTER PROCEDURE если Ваша разновидность поддержки SQL это

Но в конечном счете, я пошел бы с одним из следующего:

  • Поддержите внутреннюю схему управления версиями, таким образом, тот же SQL просто не становится выполненным дважды во-первых. Таким образом, Вы всегда знаете, где Вы в путем рассмотрения номера версии.
  • Экспортируйте существующие данные в INSERT операторы и полностью воссоздают весь DB с нуля.
4
ответ дан 2 December 2019 в 19:55
поделиться

Необходимо будет также проверить на внешние ключи на любых таблицах, что можно отбрасывать/воссоздавать. Кроме того, рассмотрите любые изменения данных, которые Вы могли бы внести - удаляют строки прежде, чем попытаться вставить во второй раз, и т.д.

Вы также могли бы хотеть вставить код для проверки на данные прежде, чем удалить таблицы как гарантию так, чтобы Вы не отбрасывали таблицы, которые уже используются.

0
ответ дан 2 December 2019 в 19:55
поделиться

Поскольку SQL обрабатывает оператор в пакетном режиме, можно выйти

Это просто к вашему сведению, я просто выполнил его 10 раз

IF EXISTS ( SELECT  *
            FROM    sys.objects
            WHERE   object_id = OBJECT_ID(N'[dbo].[foo]')
                    AND OBJECTPROPERTY(object_id, N'IsUserTable') = 1 ) 
DROP TABLE foo


GO 10 -- run the batch 10 times

Это просто к вашему сведению, я просто выполнил его 10 раз

Начало Пакета цикла выполнения

выполнение завершилось 10 раз.

0
ответ дан 2 December 2019 в 19:55
поделиться

"ЕСЛИ OBJECT_ID ('table_name', 'U') ЯВЛЯЕТСЯ NOT NULL", синтаксис хорош, он может также использоваться для процедур: ЕСЛИ OBJECT_ID ('procname', 'P') ЯВЛЯЕТСЯ NOT NULL...

... и триггеры, представления, и т.д. Вероятно, хорошая практика для определения типа (U для таблицы, P для прогр, и т.д. не помните точные буквы за все типы) в случае, если Ваше именование strandards позволяет процедурам и таблицам иметь аналогичные имена...

Кроме того, хорошая идея могла бы состоять в том, чтобы создать Ваши собственные процедуры, который изменяет таблицы с обработкой ошибок, надлежащей для Вашей среды. Например:

  • prcTableDrop, Proc для того, чтобы отбросить таблицу
  • prcTableColumnAdd, Proc для добавления столбца к таблице
  • prcTableColumnRename, Вы получаете идею
  • prcTableIndexCreate

Такой procs делает создание повторяемым (в том же или другом дб) сценарии изменения намного легче.

/B

0
ответ дан 2 December 2019 в 19:55
поделиться