Как отключить ограничение первичного ключа программно?

Для этого вы можете использовать map() для построения массива из последних четырех символов атрибутов href всех соответствующих элементов a:

[110 ]
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
  <tr>
    <td class="lc_Cell">
      <p>
        <a href="thelink1234">Link #1</a>
      </p>
    </td>
    <td class="lc_Cell">
      <p>
        <a href="thelink2345">Link #2</a>
      </p>
    </td>
    <td class="lc_Cell">
      <p>
        <a href="thelink3456">Link #3</a>
      </p>
    </td>
    <td class="lc_Cell">
      <p>
        <a href="thelink4567">Link #4</a>
      </p>
    </td>
  </tr>
</table>

При этом, учитывая вашу цель обновить атрибуты href для элементов a, в этом случае имеет больше смысла предоставлять функцию для attr() ], который вы можете использовать, чтобы вернуть новое значение на основе их текущего. Примерно так:

$('.lc_Cell a').attr('href', function(i, href) {
  var id = href.slice(-4); 
  return 'mynewlinktosendsomeoneto' + id; 
});
7
задан Tomasz Smykowski 10 April 2009 в 10:13
поделиться

5 ответов

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

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

6
ответ дан 6 December 2019 в 06:51
поделиться
ALTER TABLE mytable DROP CONSTRAINT PK_Name

Чтобы включить его:

ALTER TABLE mytable ADD CONSTRAINT PK_Name PRIMARY KEY /* CLUSTERED */ (pk_column)

Раскомментировать CLUSTERED если Вы хотите, чтобы ваш ПЕРВИЧНЫЙ КЛЮЧ был кластеризован (т.е. сами строки таблицы упорядочены)

Чтобы выяснить, кластеризован ли ПЕРВИЧНЫЙ КЛЮЧ на нет, введите:

EXEC sp_help 'mytable'

и посмотрите возвращенный набор результатов 6-го .

18
ответ дан 6 December 2019 в 06:51
поделиться

Чтобы узнать, что является первичным ключом (при условии, что ваша таблица dbo.T1):

select si.name as name,  
(case  when (si.status & 16) > 0 then 1 else 0 end) as isclust,
si.keycnt as keycnt,
si.indid as indid
from sysindexes si
left join sysobjects so on so.id = si.id 
where  si.indid > 0 
and  si.indid < 255 
and so.xtype <> 'S'
and so.id = OBJECT_ID('dbo.T1')
and (si.status & 2048) > 0

Это даст вам что-то вроде:

name                                   isclust     keycnt indid
---------------------------------------------------------------
PK_T1                                      1           2      1

Здесь у вас есть имя первичного ключа (PK_T1 ), независимо от того, кластеризован он или нет, количество полей в нем (2) и идентификатор индекса (он понадобится вам позже).

Далее выполните следующее:

select INDEX_COL('dbo.T1', 1, 1) --returns Field1
select INDEX_COL('dbo.T1', 1, 2) --returns Field2

Это даст вам имена двух полей из индекс. Первый параметр - это имя вашей таблицы, второй - идентификатор индекса, полученный ранее, а третий - цикл от 1 до keycnt (возвращается на предыдущем шаге).

Имея эту информацию, вы сможете восстановить первичный ключ следующим образом:

ALTER TABLE dbo.T1 ADD CONSTRAINT PK_T1 PRIMARY KEY CLUSTERED (Field1, Field2)

Обновление: это может быть не так точно, как синтаксический анализ результата sp_help, упомянутого ранее (вы упустите порядок сортировки и файловая группа), но проще программно.

2
ответ дан 6 December 2019 в 06:51
поделиться

It may be a better idea to SELECT your entire table into a temporary table, doing the transformation on the fly if possible, and then copying it back. And if you can't transform on the fly, it's a lot easier to add a simple integer row index as the primary key on the temporary table.

0
ответ дан 6 December 2019 в 06:51
поделиться

Не нарушать ограничение PKEY. ИМХО, это лучшее решение, вы избежите затрат на перестройку PKEY, а что, если вы не можете (дублировать оставшиеся)?

ИЛИ

Прочитайте схему, чтобы узнать, как перестроить ограничение PKEY, а затем используйте ранее опубликованное решение.

0
ответ дан 6 December 2019 в 06:51
поделиться
Другие вопросы по тегам:

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