Случайный буквенно-цифровой идентификатор на SQL Server [дубликат]

Вы можете использовать неявные классы:

import scala.math._

object ExtNumber extends App {
  implicit class ExtendedDouble(n: Double) {
    def rounded(x: Int) = {
      val w = pow(10, x)
      (n * w).toLong.toDouble / w
    }
  }

  // usage
  val a = 1.23456789
  println(a.rounded(2))
}
13
задан Lieven Keersmaekers 5 July 2010 в 10:51
поделиться

4 ответа

В SQL Server создано встроенное GUID. Для этого нет необходимости писать отдельную хранимую процедуру.

Вы можете использовать

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

Я не конечно , почему вы хотите, чтобы механизм базы данных помнил предыдущий сгенерированный GUID.

23
ответ дан Lieven Keersmaekers 17 August 2018 в 15:50
поделиться

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

Если вы используете GUID в качестве основного ключа / ключа кластеризации в SQL Server, для начала это плохая идея (здесь здесь , здесь или здесь ), вы должны хотя бы используйте функцию newsequentialid() как ограничение по умолчанию для этого столбца.

CREATE TABLE YourTable(ColumnA uniqueidentifier DEFAULT NEWSEQUENTIALID()) 

Таким образом, база данных будет генерировать псевдо-последовательные GUID для вашего ПК и, таким образом, сделает отрицательный последствия использования GUID как PK / CK по меньшей мере терпимы ....

Если вы не используете GUID в качестве основного ключа, то я не вижу никакой пользы в создании этого GUID на сервер, действительно.

5
ответ дан marc_s 17 August 2018 в 15:50
поделиться
  • 1
    Я могу думать о некоторых действительных случаях бизнеса, когда использование (последовательный) GUID было бы хорошим выбором. AMOF, если бы мы знали несколько лет назад то, что мы знаем сейчас, мы, скорее всего, выполнили бы их и спасло бы нам много проблем (и денег), пытающихся обмениваться данными с нашей головной веткой. – Lieven Keersmaekers 5 July 2010 в 11:03
  • 2
    @lieven: Кажется, вы говорите о репликации - это, вероятно, единственный действительный случай, когда вы действительно в них нуждаетесь. Сделайте их своим ПК, но если возможно, используйте что-то еще в качестве ключа кластеризации! – marc_s 5 July 2010 в 11:16
  • 3
    @marc_s Спасибо. Но что, если сервер перезагрузился?! Как я знаю, вы потеряете свою последовательность. Я ошибаюсь ? – Wahid Bitar 30 September 2014 в 08:09

RFC4122 1 : «Не предполагайте, что UUID трудно догадаться; они не должны использоваться в качестве возможностей безопасности (например, идентификаторы, чье личное владение предоставляет доступ). Предсказуемый источник случайных чисел усугубит ситуацию ».

В простой задаче инкрементный uint64 лучше.

НЕ ИСПОЛЬЗУЙТЕ GUID! Если нужна безопасность.

http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/b37b3438-90f4-41fb-adb9-3ddba16fe07c

-1
ответ дан STTR 17 August 2018 в 15:50
поделиться

Мое предпочтение заключается в создании GUID в приложении, а не в db.

3
ответ дан Tim Murphy 17 August 2018 в 15:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: