Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Выражение преобразования при изменении типа столбца

Добрый день!
Народ, подскажите как при смене типа столбца, в выражении преобразования указать всем значениям NULL? В центре управления делаю для 9.7.
Ответ: Маленькое добавление.

Помимо DEFAULT (см. описание SYSCAT.COLUMNS - ) среди внутренних аттрибутов колонки бывает ещё IMPLICITVALUE (см. там же).

В IMPLICITVALUE записывается заданное DEFAULT значение, которое указано при _добавлении_ столбца.
Сделано это для того, чтобы не перелопачивать существующие записи таблицы после ALTER TABLE ADD COLUMN, добавляя новое поле.
Дальнейшая логика проста - встретили при чтении страницы запись, где значение поля физически отсутствует, забрали его из этого IMPLICITVALUE (NULL для каждой из колонок после CREATE TABLE ...).
Этого второго дополнительного поля не избежать, поскольку DEFAULT может в будущем быть с лёгкостью поменян.

Важное следствие!
Таблицы с разными не-NULL IMPLICITVALUE не могут быть объединены в одну партиционированную таблицу.
О чём там в доке и сказано:
Attaching a data partition is allowed unless IMPLICITVALUE for a specific column is a non-null value 
for both the source column and the target column, and the values do not match. In this case, you must drop
the source table and then re-create it. A column can have a non-null value in the IMPLICITVALUE field if one of
the following conditions is met:

* The column is created as the result of an ALTER TABLE...ADD COLUMN statement
* The IMPLICITVALUE field is propagated from a source table during attach
* The IMPLICITVALUE field is inherited from a source table during detach
* The IMPLICITVALUE field is set during database upgrade from Version 8 to Version 9, where it is determined to be
an added column, or might be an added column. If the database is not certain whether the column is added or not,
it is treated as added. An added column is a column that was created as the result of an ALTER TABLE...ADD COLUMN statement.

To avoid these inconsistencies during non-migration scenarios, it is recommended that you always create the tables
that you are going to attach with all the columns already defined. That is, never use the ALTER TABLE statement to add
columns to a table before attaching it.

Т.е. для таблиц, уже связанных с партиционированием, или для которых оно может потребоваться в будущем изменение структуры надо проводить с определённой аккуратностью.
Вопрос: Изменение типа полей таблицы

Доброго времени суток!
Имеется таблица tb1
+ tb1

CREATE TABLE tb1(
	[ID] [bigint] IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED ,
	...
	[field1] float NOT NULL,
	...
	[field10] float NOT NULL,
	[field11] bigint NOT NULL,
	[catalogId] bigint NULL,
	FOREIGN KEY (masterId) REFERENCES tbCatalog(Id) 
) 


в которой > 10 млн записей.
Требуется поменять тип всех float полей на decimal(28, 9), и еще 1 с bigint на int.
В таблице всего пару индексов (по первичному и внешнему ключам).
Что отработает быстрее, замены типов командой alter column или
создание новой таблицы - заполнение - удаление старой - переименование
и почему?
Насколько сильна зависимость от того, происходит расширение типа или его сжатие, от количества индексов (при условии, что типы индексированных и участвующих в индексах полей заменять не требуется)?
Ответ: С изменением типов надо быть осмотрительным, т.к. после этого может перестать работать клиент. Также, чтобы не переливать всю таблицу, можно использовать add/drop/rename column. Смотрите по ситуации (размер и скорость работы журнала, например).
Вопрос: Безопасное изменение типа данных в таблице

Необходимо изменить тип столбца базы данных с varchar на числовой, при этом не потеряв данных. как будет выглядеть запрос? Заранее благодарен.
Ответ: Доброго времени суток. Подскажите запрос на изменение типа столбца в VIEW TABLE.
VIEW Таблица Table1 тип nvarchar(50), нужно сменить ей тип на int. Спасибо!
Вопрос: создание формы с изменением данных в таблице - MS Access

Нужно создать таблицу склад(с книгами) и заказов. Вывести запрос на остаток, общее количество книг и затем создать форму с автоматическим изменением данных в таблице "склад" (пыталась, не выходит).
сказали сделать что-то типо чека(в магазине).
Ответ:
ks68
Нужно создать таблицу склад(с книгами) и заказов. Вывести запрос на остаток, общее количество книг и затем создать форму с автоматическим изменением данных в таблице "склад" (пыталась, не выходит).
сказали сделать что-то типо чека(в магазине).


какой тип работы
--производственная
--студенческая

--локальная
--сетевая
Вопрос: История изменения данных в таблице

Здравствуйте.

Подскажите пожалуйста как можно просмотреть историю по изменению данных в таблице к примеру определенного поля?

Спасибо!
Ответ:
Nechto
Здравствуйте.

Подскажите пожалуйста как можно просмотреть историю по изменению данных в таблице к примеру определенного поля?

Спасибо!


CT, CDC
Вопрос: Определить тип поля таблицы

День добрый.
Вопросик возник вот в чем, как определить действительный тип поля таблицы.
Пример:
-- Create table
create table F
( id INTEGER,
rate NUMBER(12,6) )
видим что id это integer
смотрим
SELECT F.*
FROM USER_TAB_COLUMNS F
WHERE F.TABLE_NAME = 'F'
и видим что ID это number !

Как определить действительный тип поля
Ответ:
Casper_ora
Fogel,

integer и number - это не синонимы), когда объявляем поле типа number и указываем значения поля, Оракл определяет его как integer, но прописанный нами тип number не подменяет под другие типы.


В постановке вопроса было наоборот - ставим integer, а получаем number - почему?

integer - тип данных стандарта SQL2003
number - тип данных вне станадарта SQL2003 (есть в Oracle, MSSQL и т.д. а в стандарте нет)
Oracle применяет свой стандарт для работы, конвертирует внешние (в том числе и "стандартные") аналоги в то, что заложено в логику своей работы, в "свои" типы.

SQL2003 не самая новая версия стандарта, поэтому могут быть накладки и споры в зависимости от версий, с которой работал тот или иной "докладчик"
Вопрос: Изменение типа связей (1к1, 1 ко многим и т.д.)

Всем здоровья!

Я чего-то неимоверно туплю, но второй день пытаюсь постичь, как в sql server 2008 R2 менять типы связей таблиц.
Т.е. сделал я таблицы, перетащил из одной строку на другую - он сделал связь: то 1к1 (два ключика), то 1 ко многим (ключик-бесконечность), причём делает это как попало и ничего, естественно, не спрашивает.
Облазил все настройки, все эти окошки "Связи по внешнему ключу" - не понимаю как поменять.
Облазил MSDN - ничего не понял.
Почитал умную книжку - ничего умного не написано.
Башка аж разболелась

Может кто-нибудь объяснит в двух словах где же эту заразу менять?
Ответ:
Сообщение от iap
Если по полям FOREIGN KEY построен уникальный индекс, то связь 1:1, иначе 1 ко многим!
В первом случае не более одной строки может ссылаться на PK другой таблицы.
Во втором - любое количество.
а можно пример реализации связи 1:1? Интересует сам sql запрос
Вопрос: Подсчет уникальных значений во всех столбцах таблицы

Я знаю что посчитать количество уникальных элементов в столбце можно узнать с помощью distinct, а как узнать это количество для всех столбцов таблицы в одной записи, если я наперед не знаю сколько столбцов в таблице?
Ответ: msLex,

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

Модератор: Ться- и тся- пусть остаются на совести Dimmf28. Но код картинкой постить только в аду разрешается. Аминь, азаза.
Вопрос: Запрос на получение имён всех столбцов таблицы при их неизвестном количестве

Здравствуйте!
Подскажите пожалуйста, возможно ли через запрос получить имена всех столбцов таблицы. При этом количество столбцов конкретной таблицы неизвестно.
Ну или, если невозможно получить такие данные через запрос, то как это сделать через VB?
Ответ:
Сообщение от GafarovIS
Сообщение от Capi
Visual Basic
1
2
3
4
Dim Fld As Field
For Each Fld In CurrentDb.TableDefs("таблица").Fields
  Debug.Print Fld.Name
Next
что-то не хочет моя БД работать с этим кодом. Ошибку выдаёт.
Да. Это известная неприятность.
Просто как-то выпало из памяти.
Почему-то для TableDefs недостаточно просто CurrentDb.
Нужно сделать так:
Visual Basic
1
2
3
4
5
6
Dim Fld As Field, _
    Db As Database
Set Db = CurrentDb
For Each Fld In Db.TableDefs("таблица").Fields
  Debug.Print Fld.Name
Next
Вопрос: SSRS и subscription по изменению данных в таблице

Мне надо формировать подписку по изменению данных в таблице. Как это делать более правильно для SSRS?
Ответ: Hel975,

например создай подписку, удали от туда расписание, запускай Agent Job подписки через T-SQL вызовом sp_start_job когда тебе нужно (а это определяется например SQL тригером на нужной таблице, если изменение одно конечно, ну или периодическим сканированием, здесь методов много, но это уже не для этой ветки - скорее в )