Таблицы с переменными "varchar (50)" в переменную "int" и "float / decimal" в SQL - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь преобразовать столбцы в моей таблице из varchar (50) в число с плавающей запятой или десятичное число с помощью SQL Server Management Studio. Мне удалось сделать это с чем-то вроде

alter table Miguel.dbo.[2015-2016] alter column FTAG int

, и это сработало хорошо. Я даже могу изменить это вручную в настройках таблицы из консоли. Дело в том, что у меня есть 3 таблицы с 50 столбцами в каждой, и это пустая трата времени, чтобы проверить, является ли каждый столбец целым числом или числом с плавающей запятой, и впоследствии изменить его вручную. Как я могу применить общее изменение ко всей таблице, чтобы оно автоматически распознало, является ли оно целым числом или числом с плавающей запятой (если значения имеют десятичные дроби).

1 Ответ

0 голосов
/ 06 апреля 2020

Используйте файл формата для описания вашего файла на sql сервере. Это xml или собственный отформатированный файл, который сообщает sql серверу, как сопоставить столбцы в файле со столбцами в вашей таблице

Подробное объяснение можно найти в прекрасном руководстве

Общий процесс:

  • иметь таблицу со столбцами различных типов данных
  • создать файл формата, описывающий csv, ширину полей, терминаторы et c, и сопоставляет поля со столбцами (следовательно, поддерживает поля и столбцы, которые не в том же порядке)
  • запускает импорт с использованием файла формата

Вот точный MSDN :

Создать таблицу:

CREATE TABLE dbo.Person (
PersonID smallint,
FirstName varchar(25),
LastName varchar(30),
BirthDate Date
);

Создать CSV (c: \ temp \ my.csv):

1,Anthony,Grosse,1980-02-23
2,Alica,Fatnowna,1963-11-14
3,Stella,Rosenhain,1992-03-02

Создать файл формата ( c: temp \ format. xml):

<?xml version="1.0"?>
<BCPFORMAT xmlns="https://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <RECORD>
  <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="7"/>
  <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="25" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="3" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="30" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>
  <FIELD ID="4" xsi:type="CharTerm" TERMINATOR="\r\n" MAX_LENGTH="11"/>
 </RECORD>
 <ROW>
  <COLUMN SOURCE="1" NAME="PersonID" xsi:type="SQLSMALLINT"/>
  <COLUMN SOURCE="2" NAME="FirstName" xsi:type="SQLVARYCHAR"/>
  <COLUMN SOURCE="3" NAME="LastName" xsi:type="SQLVARYCHAR"/>
  <COLUMN SOURCE="4" NAME="BirthDate" xsi:type="SQLDATE"/>
 </ROW>
</BCPFORMAT>

Импорт данных из CSV со ссылкой на файл формата:

BULK INSERT dbo.Person   
   FROM 'c:\temp\my.csv'   
   WITH (FORMATFILE = 'c:\temp\format.xml');  
GO  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...