Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как запросом поменять тип всех полей в таблице?  [new]
qwertyqwertyz
Guest
Нужно запросом в таблице изменить тип всех полей на NVARCHAR()
Помогите, пожалуйста
4 апр 17, 11:40    [20364417]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом поменять тип всех полей в таблице?  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
qwertyqwertyz,

drop & create

Прям все поля? Может ещё и во всех таблицах?
4 апр 17, 11:43    [20364440]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом поменять тип всех полей в таблице?  [new]
SandraSidorova
Member

Откуда: Пермь
Сообщений: 60
Шыфл,

нет, не во всех таблицах. Удалять таблицы нельзя
4 апр 17, 11:46    [20364467]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом поменять тип всех полей в таблице?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
SandraSidorova,

собиорайте динамический скрипт sys.columns + sys.tables
4 апр 17, 11:48    [20364478]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом поменять тип всех полей в таблице?  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
TaPaK
SandraSidorova,

собиорайте динамический скрипт sys.columns + sys.tables


Только он может и не сработать <_< Проще перелить данные в новую таблицу, заархивировать старую а новую переименовать
4 апр 17, 12:29    [20364746]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом поменять тип всех полей в таблице?  [new]
Хе-хе )
Guest
Ну int -> Varchar и image->varbinary я менял без проблем
4 апр 17, 12:42    [20364804]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом поменять тип всех полей в таблице?  [new]
o-o
Guest
Хе-хе )
Ну int -> Varchar я менял без проблем

некоторые int по совместительству identity
4 апр 17, 12:44    [20364813]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом поменять тип всех полей в таблице?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
o-o
Хе-хе )
Ну int -> Varchar я менял без проблем

некоторые int по совместительству identity

+ FK в любом случае затея дурацкая :)
4 апр 17, 12:47    [20364827]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом поменять тип всех полей в таблице?  [new]
o-o
Guest
в дурацких базах и таких же руках таких слов как FK могут и не знать.
но затея да, офигительная
4 апр 17, 12:52    [20364853]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом поменять тип всех полей в таблице?  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
o-o,
Вангую - это всё нужно для экспрорта через какую-нить приблуду. Потом нужно будет всё на место вернуть.
4 апр 17, 13:11    [20364972]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом поменять тип всех полей в таблице?  [new]
SandraSidorova
Member

Откуда: Пермь
Сообщений: 60
Шыфл,

нужно было запросом Импортировать данные из Excel в SQL Server. потом объединить несколько однотипных таблиц.
И при объединении тип полей не совпадает, т.к. в одной таблице есть поля в которых все записи пустые, а в другой таблице в этих полях содержатся числовые данные. Поэтому для объединения этих таблиц и хотелось поменять тип всех полей на varchar
4 апр 17, 15:17    [20365640]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом поменять тип всех полей в таблице?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31446
SandraSidorova
нужно было запросом Импортировать данные из Excel в SQL Server. потом объединить несколько однотипных таблиц.
И при объединении тип полей не совпадает, т.к. в одной таблице есть поля в которых все записи пустые, а в другой таблице в этих полях содержатся числовые данные. Поэтому для объединения этих таблиц и хотелось поменять тип всех полей на varchar
Нужно импортировать таблицы эксель в временные таблицы на сервер. А потом запросами переносить данные, с необходимыми проверками и преобразованиями.
4 апр 17, 17:30    [20366296]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом поменять тип всех полей в таблице?  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
SandraSidorova,

путём проб и ошибок выяснено, что данные нужно импортировать вместе с названиями полей! Тогда драйвер эксцеля сам присваивает всем столбцам varchar.

В итоге получается что-то вроде этого:
		insert into [#cHR_unpvt] (YEAR_ID,measure,ROW_NUM_ID,value,FEILD_NUM_ID)
		exec( 'select  F1 as YEAR_ID, F2 as measure, ID as ROW_NUM_ID, cast(replace(value,'','',''.'') as decimal(28,10)) as value, field_name as [FEILD_NUM_ID]
			FROM (
				select *,
				row_number() over(order by (select 1)) as ID
			FROM OPENROWSET(
				''' + @xlsProvider + ''',
				''' + @xlsFileVersion + ';HDR=No;IMEX=1;Database=' + @dir4 + @f4 + ''','' 
				select *
				from ['+@s4+'$A2:Z]'')) as a
			unpivot
			(
			value for field_name in (F3,F4,F5,F6,F7,F8,F9,F10,F11,F12,F13,F14,F15,F16,F17,F18,F19,F20,F21,F22,F23,F24,F25,F26)
			) as unpvt
			WHERE unpvt.ID>1
			');
6 апр 17, 10:56    [20372125]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом поменять тип всех полей в таблице?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7869
Шыфл,

тип присваивается по значению/типу в первой строке.
6 апр 17, 10:59    [20372153]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом поменять тип всех полей в таблице?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Владислав Колосов
Шыфл,

тип присваивается по значению/типу в первой строке.

не если не ошибаюсь то нет... там сколько-то... 8 строк вроде анализирует
6 апр 17, 11:13    [20372243]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом поменять тип всех полей в таблице?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7869
TaPaK,

может и 8, я так подробно не изучал.
6 апр 17, 11:39    [20372434]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом поменять тип всех полей в таблице?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Владислав Колосов
TaPaK,

может и 8, я так подробно не изучал.

да 8
автор
Rows to Scan: Excel does not provide ADO with detailed schema information about the data it contains, as a relational database would. Therefore, the driver must scan through at least a few rows of the existing data in order to make an educated guess at the data type of each column. The default for "Rows to Scan" is eight (8) rows

есть параметр в реестре, но имхо он не очень :)
6 апр 17, 11:47    [20372512]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом поменять тип всех полей в таблице?  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
Владислав Колосов
Шыфл,
тип присваивается по значению/типу в первой строке.


Этим и пользуемся - импортируем как бы всё, но в выборку пускаем только ID>1. Он по заглавиям столбцов везде строку определяет. Пока числовых названий стобцов не был ^_^
6 апр 17, 15:34    [20373860]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом поменять тип всех полей в таблице?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3763
o-o
Хе-хе )
Ну int -> Varchar я менял без проблем

некоторые int по совместительству identity


ага, и их нужно сделать bigint
6 апр 17, 15:38    [20373884]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом поменять тип всех полей в таблице?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3763
SandraSidorova
Шыфл,

нет, не во всех таблицах. Удалять таблицы нельзя


Хмм, а вы откуда знаете, что нужно юзеру "qwertyqwertyz"?
или у вас тоже такая же задача?
6 апр 17, 15:54    [20374003]     Ответить | Цитировать Сообщить модератору
 Re: Как запросом поменять тип всех полей в таблице?  [new]
o-o
Guest
Ролг Хупин
SandraSidorova
Шыфл,

нет, не во всех таблицах. Удалять таблицы нельзя


Хмм, а вы откуда знаете, что нужно юзеру "qwertyqwertyz"?
или у вас тоже такая же задача?

так это она же.
а вот при чем тут bigint?
6 апр 17, 15:57    [20374039]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить