Недавно я столкнулся с проблемой в SQL-скрипте, где оператор insert (который вставлял несколько строк) имел столбец типа varchar (10), а строки данных, которые он вставлял, проходили в ints.SQL молча преобразует int в varchar, но затем выдает ошибку, когда он встречается с varchar?
Однако, когда я добавил новую строку данных для вставки, и использовать VARCHAR в колонке VARCHAR, SQL попытался преобразовать его в Int, даже если столбец имеет тип VARCHAR (10)
Вот пример, который вы можете запустить локально.
CREATE TABLE dbo.TestTable
(
VarcharColumn varchar(10) NOT NULL
) ON [PRIMARY]
insert into TestTable(VarcharColumn)
Values (1)
При запуске этого, он вставляет просто отлично, SQL должен молча преобразовать это целое значение в VARCHAR за кулисами.
Однако тогда, если вы попытаетесь это сделать:
insert into TestTable(VarcharColumn)
Values (1),(2),('Hello')
SQL выбросит следующее сообщение об ошибке:
Conversion failed when converting the varchar value 'Hello' to data type int.
Кто-нибудь может предложить объяснение в внутреннюю работу SQL в этом случае? В частности:
- Почему SQL позволяет вставлять целые числа в VARCHAR столбцов
- Почему когда SQL молчаливо преобразования этих значений, если он работает по фактической VARCHAR он будет пытаться преобразовать его в целое.
Я понимаю, как исправить эту проблему и как ее избежать в первую очередь, но я ищу объяснение, почему SQL работает таким образом.
пройти через [документации] (https://msdn.microsoft.com/en-us/library/ms191530.aspx) –
Что является объяснить? Ваши вопросы показывают, что вы точно понимаете ситуацию. Ответ таков: так работает SQL Server. –
@ GordonLinoff, это не то, что я спросил. Я задал два вопроса: почему он допускает неявное преобразование (которое, по-видимому, объясняет ссылка vkp на документацию) и как неявное преобразование работает во вставке операторов с несколькими строками. «Вот как это работает» - это ужасное, ничего не сделанное утверждение. –