Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 вставить поле в таблицу  [new]
нуб987
Guest
подскажите, как вставить столбец в таблицу?
например есть такая таблица:
CREATE TABLE [Table1] (
	[id] [int] IDENTITY (1, 1) NOT NULL ,
	[Name] [varchar] (50) NOT NULL
)

нужно вставить столбец между id и Name. Вот как?
3 июл 12, 12:23    [12808988]     Ответить | Цитировать Сообщить модератору
 Re: вставить поле в таблицу  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37200
нуб987
подскажите, как вставить столбец в таблицу?
например есть такая таблица:
CREATE TABLE [Table1] (
	[id] [int] IDENTITY (1, 1) NOT NULL ,
	[Name] [varchar] (50) NOT NULL
)

нужно вставить столбец между id и Name. Вот как?
Пересозданием таблицы. Вот только нафига?
3 июл 12, 12:26    [12809009]     Ответить | Цитировать Сообщить модератору
 Re: вставить поле в таблицу  [new]
нуб987
Guest
но в редакторе таблиц же можно поле вставить. И если там уже есть миллион записей, они никуда не деваются. И эта вставка почти не занимает времени (если вставляемое поле nullable и т.п.)
ПС. Нужно для "аккуратности". Чтобы близкие по назначению поля были рядом
3 июл 12, 12:33    [12809060]     Ответить | Цитировать Сообщить модератору
 Re: вставить поле в таблицу  [new]
Gwa
Guest
Что значит как?
Заходите в БД через Management Studio и добавляете столбец, если, конечно,
у Вас есть сответствующие права..
Если нет, то обращаетесь к администратору БД.
3 июл 12, 12:35    [12809069]     Ответить | Цитировать Сообщить модератору
 Re: вставить поле в таблицу  [new]
Gwa
Guest
нуб987,
если Вас интересует порядок полей, то они перетаскиваются мышью..
3 июл 12, 12:40    [12809090]     Ответить | Цитировать Сообщить модератору
 Re: вставить поле в таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104751
нуб987
ПС. Нужно для "аккуратности". Чтобы близкие по назначению поля были рядом

А нельзя так аккуратьненько в запросе перечислить "близкие по назначению поля" рядом ?
3 июл 12, 12:42    [12809100]     Ответить | Цитировать Сообщить модератору
 Re: вставить поле в таблицу  [new]
нуб987
Guest
Gwa, интересует, как вставить поле скриптом
3 июл 12, 12:42    [12809101]     Ответить | Цитировать Сообщить модератору
 Re: вставить поле в таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104751
нуб987
Gwa, интересует, как вставить поле скриптом

В студии жмете кнопку Script и ... удивляетесь результату
3 июл 12, 12:43    [12809108]     Ответить | Цитировать Сообщить модератору
 Re: вставить поле в таблицу  [new]
Alexandr Kr.
Member

Откуда: Украина, Харьков
Сообщений: 165
нуб987
но в редакторе таблиц же можно поле вставить. И если там уже есть миллион записей, они никуда не деваются. И эта вставка почти не занимает времени (если вставляемое поле nullable и т.п.)
ПС. Нужно для "аккуратности". Чтобы близкие по назначению поля были рядом


А вы сделайте такую "аккуратность" на табличке в 100 млн, например, записей.
А еще лучше сделайте правску и сгенерируйте скрипт и посмотрите ЧТО там на самом деле происходит. Может и отпадет желание такой фигней заниматься.
3 июл 12, 12:44    [12809111]     Ответить | Цитировать Сообщить модератору
 Re: вставить поле в таблицу  [new]
нуб987
Guest
Glory, можно в принципе вообще ничего не делать ;)
просто интересно, как сделать это скриптом? Почему в редакторе таблиц это можно без проблем, а скриптом как?
3 июл 12, 12:44    [12809115]     Ответить | Цитировать Сообщить модератору
 Re: вставить поле в таблицу  [new]
iap
Member

Откуда: Москва
Сообщений: 47063
нуб987
но в редакторе таблиц же можно поле вставить. И если там уже есть миллион записей, они никуда не деваются. И эта вставка почти не занимает времени (если вставляемое поле nullable и т.п.)
если в конец, то может быть.
А если в произвольное место, то сказки-то не рассказывайте.
Тем более, легко получить скрипт, которым при этом пользуется студия.
Это будет пересоздание таблицы с перезаливкой данных, как уже говорили.
id колонки иначе не изменить
3 июл 12, 12:47    [12809122]     Ответить | Цитировать Сообщить модератору
 Re: вставить поле в таблицу  [new]
нуб987
Guest
[quot Alexandr Kr.]
нуб987
А вы сделайте такую "аккуратность" на табличке в 100 млн, например, записей.
А еще лучше сделайте правску и сгенерируйте скрипт и посмотрите ЧТО там на самом деле происходит. Может и отпадет желание такой фигней заниматься.

у меня SQL2000
там все так страшно с этой вставкой?
а можно пример такого скрипта, если не затруднит?
3 июл 12, 12:48    [12809128]     Ответить | Цитировать Сообщить модератору
 Re: вставить поле в таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104751
нуб987
у меня SQL2000
там все так страшно с этой вставкой?
а можно пример такого скрипта, если не затруднит?

Вам трудно в дизайнере нажать кнопку получения скрипта ?
3 июл 12, 12:54    [12809158]     Ответить | Цитировать Сообщить модератору
 Re: вставить поле в таблицу  [new]
iap
Member

Откуда: Москва
Сообщений: 47063
Glory
нуб987
у меня SQL2000
там все так страшно с этой вставкой?
а можно пример такого скрипта, если не затруднит?

Вам трудно в дизайнере нажать кнопку получения скрипта ?
В 2000-м разве это было возможно? (Я просто не помню)
3 июл 12, 12:59    [12809202]     Ответить | Цитировать Сообщить модератору
 Re: вставить поле в таблицу  [new]
нуб987
Guest
Glory
Вам трудно в дизайнере нажать кнопку получения скрипта ?

если бы я знал, где она в 2000й версии, то с радостью бы нажал.
Посмотрел через Profiler - да, запросов на вставку поля генерируется не мало. Еще не совсем разобрался, что каждый из них делает, но там присутствует
DROP TABLE dbo.Table1
3 июл 12, 13:01    [12809216]     Ответить | Цитировать Сообщить модератору
 Re: вставить поле в таблицу  [new]
Glory
Member

Откуда:
Сообщений: 104751
нуб987
если бы я знал, где она в 2000й версии, то с радостью бы нажал.

На ряд кнопок в Дизайнере что мешает посмотреть ?
Можно даже мышку навести для получения подсказки
3 июл 12, 13:03    [12809230]     Ответить | Цитировать Сообщить модератору
 Re: вставить поле в таблицу  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
Чего вы издеваетесь над человеком?

ALTER TABLE [Table] ADD [Column] Column_type not null [default 0]
GO
3 июл 12, 13:16    [12809320]     Ответить | Цитировать Сообщить модератору
 Re: вставить поле в таблицу  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1566
Александр52
Чего вы издеваетесь над человеком?

ALTER TABLE [Table] ADD [Column] Column_type not null [default 0]
GO
Никто над ним не издевается. Ему надо не просто добавить, а вставить между уже имеющимися.
3 июл 12, 13:17    [12809330]     Ответить | Цитировать Сообщить модератору
 Re: вставить поле в таблицу  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
Sergey Sizov
Ему надо не просто добавить, а вставить между уже имеющимися.

тогда применяете мой скрипт. Затем в дизайнере(вкладка "Проект") просто перетаскиваете между нужных колонок и сохраняете.
3 июл 12, 13:20    [12809347]     Ответить | Цитировать Сообщить модератору
 Re: вставить поле в таблицу  [new]
iap
Member

Откуда: Москва
Сообщений: 47063
Александр52
Чего вы издеваетесь над человеком?

ALTER TABLE [Table] ADD [Column] Column_type not null [default 0]
GO
А почему default в квадратных скобках? Модно что ли?
3 июл 12, 13:21    [12809349]     Ответить | Цитировать Сообщить модератору
 Re: вставить поле в таблицу  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
iap, : )

Это лишь пример, конечно их нужно опустить
3 июл 12, 13:24    [12809383]     Ответить | Цитировать Сообщить модератору
 Re: вставить поле в таблицу  [new]
нуб987
Guest
Glory
нуб987
если бы я знал, где она в 2000й версии, то с радостью бы нажал.

На ряд кнопок в Дизайнере что мешает посмотреть ?
Можно даже мышку навести для получения подсказки

да, пардон. Кнопка была задисаблена сначала. А после вставки поля я чего-то протупил. Вот скрипт:
BEGIN TRANSACTION
SET QUOTED_IDENTIFIER ON
SET ARITHABORT ON
SET NUMERIC_ROUNDABORT OFF
SET CONCAT_NULL_YIELDS_NULL ON
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
COMMIT
BEGIN TRANSACTION
CREATE TABLE dbo.Tmp_Table1
	(
	id int NOT NULL IDENTITY (1, 1),
	qwe char(10) NULL,
	qqq int NULL,
	Name varchar(50) NOT NULL
	)  ON [PRIMARY]
GO
SET IDENTITY_INSERT dbo.Tmp_Table1 ON
GO
IF EXISTS(SELECT * FROM dbo.Table1)
	 EXEC('INSERT INTO dbo.Tmp_Table1 (id, qqq, Name)
		SELECT id, qqq, Name FROM dbo.Table1 (HOLDLOCK TABLOCKX)')
GO
SET IDENTITY_INSERT dbo.Tmp_Table1 OFF
GO
DROP TABLE dbo.Table1
GO
EXECUTE sp_rename N'dbo.Tmp_Table1', N'Table1', 'OBJECT'
GO
COMMIT

гораздо понятней, чем в профайлере :) Можно немного переделать и использовать на рабочих таблицах. Спасибо всем :)
3 июл 12, 13:26    [12809395]     Ответить | Цитировать Сообщить модератору
 Re: вставить поле в таблицу  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37200
Вопрос "нафига" так и остался не раскрыт.
3 июл 12, 13:28    [12809410]     Ответить | Цитировать Сообщить модератору
 Re: вставить поле в таблицу  [new]
Alexandr Kr.
Member

Откуда: Украина, Харьков
Сообщений: 165
Александр52
Sergey Sizov
Ему надо не просто добавить, а вставить между уже имеющимися.

тогда применяете мой скрипт. Затем в дизайнере(вкладка "Проект") просто перетаскиваете между нужных колонок и сохраняете.


Ёпта. И что по вашему произодйет после сохранения? Магическая псевдооперация "а перетащи эту колонку с этого места на это"?
3 июл 12, 13:28    [12809414]     Ответить | Цитировать Сообщить модератору
 Re: вставить поле в таблицу  [new]
нуб987
Guest
для таких же нубов типа меня поясню:
сначала создается "временная" таблица с нужным набором полей (допустим была таблица <id, Name>, а нам нужно <id, qqq, Name>).
Потом в эту таблицу вставляются записи из исходной таблицы (в новом поле будут NULL'ы).
Затем исходная таблица удаляется, а "временная" переименовывается в <имя исходной таблицы>
3 июл 12, 13:30    [12809439]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить