Одна идея изменить ширину до - это определить шаблон столбца, как показано ниже, который будет принудительно устанавливать ширину первого элемента только тогда, когда другой будет следовать grid-auto-columns
. По сути, мы определяем явную сетку с 1 столбцом, тогда браузер будет добавлять дополнительные столбцы по мере необходимости для создания неявной сетки:
:root {
--gap: 25px;
}
body {
width: 100vw;
overflow-x: hidden;
margin: 0
}
#c {
width: 100%;
height: 50px;
overflow-x: auto;
display: grid;
grid-gap: 20px;
grid-template-columns:1px;
grid-auto-flow: column;
grid-auto-columns: calc(calc(100% - calc(var(--gap) * 2)) / 1.5);
border: solid red 1px;
}
/* second approach */
#c::before {
content: '';
}
#c::after {
content: '';
width: 1px; /* works out to about 25px or var(--gap) */
}
.i {
/*width: 100%; not needed*/
height: 25px;
/*display: inline-block; not needed*/
}
.i:nth-child(odd) {
background: skyblue;
}
.i:nth-child(even) {
background: pink;
}
<div id='c'>
<div class='i'>1</div>
<div class='i'>2</div>
<div class='i'>3</div>
<div class='i'>4</div>
<div class='i'>5</div>
<div class='i'>6</div>
<div class='i'>7</div>
<div class='i'>8</div>
<div class='i'>9</div>
<div class='i'>10</div>
<div class='i'>11</div>
<div class='i'>12</div>
<div class='i'>13</div>
<div class='i'>14</div>
<div class='i'>15</div>
<div class='i'>16</div>
<div class='i'>17</div>
<div class='i'>18</div>
<div class='i'>19</div>
<div class='i'>20</div>
<div class='i'>21</div>
<div class='i'>22</div>
<div class='i'>23</div>
<div class='i'>24</div>
</div>
Вы можете отключить ограничения FK и CHECK только в SQL 2005+ . См. ALTER TABLE
ALTER TABLE foo NOCHECK CONSTRAINT ALL
или
ALTER TABLE foo NOCHECK CONSTRAINT CK_foo_column
Первичные ключи и уникальные ограничения не могут быть отключены, но это должно быть хорошо, если я вас правильно понял.
И, если вы хотите проверить, что вы не порвали свои отношения и не представили сирот, как только вы вооружив ваши чеки, т. е.
ALTER TABLE foo CHECK CONSTRAINT ALL
или
ALTER TABLE foo CHECK CONSTRAINT FK_something
, вы сможете вернуться и выполнить обновление для любых проверенных столбцов, например, так:
UPDATE myUpdatedTable SET someCol = someCol, fkCol = fkCol, etc = etc
И любые ошибки в этой точке будут вызваны несоблюдением ограничений.
You can actually disable all database constraints in a single SQL command and the re-enable them calling another single command. See:
I am currently working with SQL Server 2005 but I am almost sure that this approach worked with SQL 2000 as well
Отключение и включение всех внешних ключей
CREATE PROCEDURE pr_Disable_Triggers_v2
@disable BIT = 1
AS
DECLARE @sql VARCHAR(500)
, @tableName VARCHAR(128)
, @tableSchema VARCHAR(128)
-- List of all tables
DECLARE triggerCursor CURSOR FOR
SELECT t.TABLE_NAME AS TableName
, t.TABLE_SCHEMA AS TableSchema
FROM INFORMATION_SCHEMA.TABLES t
ORDER BY t.TABLE_NAME, t.TABLE_SCHEMA
OPEN triggerCursor
FETCH NEXT FROM triggerCursor INTO @tableName, @tableSchema
WHILE ( @@FETCH_STATUS = 0 )
BEGIN
SET @sql = 'ALTER TABLE ' + @tableSchema + '.[' + @tableName + '] '
IF @disable = 1
SET @sql = @sql + ' DISABLE TRIGGER ALL'
ELSE
SET @sql = @sql + ' ENABLE TRIGGER ALL'
PRINT 'Executing Statement - ' + @sql
EXECUTE ( @sql )
FETCH NEXT FROM triggerCursor INTO @tableName, @tableSchema
END
CLOSE triggerCursor
DEALLOCATE triggerCursor
Сначала курсор foreignKeyCursor объявляется как оператор SELECT который собирает список внешних ключей и их имена таблиц. Далее курсор открывается и выполняется начальный оператор FETCH. Эта Оператор FETCH считывает данные первой строки в локальный переменные @foreignKeyName и @tableName. При переходе через курсор, вы можете проверить @@ FETCH_STATUS на значение 0, которое указывает, что выборка прошла успешно. Это означает, что цикл будет продолжать двигаться вперед, чтобы он мог получить каждый последующий внешний ключ из набора строк. @@ FETCH_STATUS доступен для всех курсоров на подключение. Итак, если вы просматриваете несколько курсоров, это важно проверить значение @@ FETCH_STATUS в заявлении сразу после оператора FETCH. @@ FETCH_STATUS будет отражать статус самой последней операции FETCH в соединении. Допустимые значения для @@ FETCH_STATUS:
0 = FETCH успешно
-1 = FETCH не удалось
-2 = выбранная строка отсутствуетВнутри цикла код строит команду ALTER TABLE по-другому в зависимости от того, есть ли намерение отключить или включить иностранный ограничение ключа (с использованием ключевого слова CHECK или NOCHECK). Заявление затем распечатывается в виде сообщения, чтобы можно было наблюдать за его ходом, а затем заявление выполнено. Наконец, когда все строки были повторены через, хранимая процедура закрывается и освобождает курсор.