Как выполнить запрос INSERT, SELECT, JOIN и CAST с помощью Microsoft SQL Server Management Studio? - PullRequest
0 голосов
/ 24 апреля 2018

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

Ниже приведена последняя версия SQL-запроса, над которым я работал.

INSERT INTO TestData.dbo.Info (Name,Did)
SELECT DISTINCT a.Name, b.Did
FROM StageDB.dbo.MockData a INNER JOIN Testdata.dbo.Dinfo b
ON a.Name = CAST(b.Did as varchar(10))

Вывод, который я получаю, следующий:

(затронуто 0 строк)

Я пытался разобраться с этим сам, но не могу заставить его работать так, как я хочу.

Моя цель здесь - извлечь данные (первичный ключ из таблицы с данными, уже находящимися в моей базе данных, из TestData.dbo.Dinfo типа int) и объединить их с данными из моей промежуточной таблицы (определенного столбца). из таблицы в промежуточной базе данных StageDB.dbo.MockData, имя типа varchar (10)), а затем вставьте ее в новую таблицу в моей основной базе данных. Таблица базы данных, в которую я пытаюсь поместить эти вещи, настроена с правильными полями и типами (столбец первичного ключа, автоматически генерируется при добавлении строк, столбец имени varchar (10) и столбец Did, являющийся int) .

РЕДАКТИРОВАТЬ: определения таблиц, пример данных, желаемый результат

Таблица назначения:

TestData.dbo.Info

Столбцы: Iid (int, первичный ключ таблицы установлен на автоматическое увеличение при добавлении новых записей), Name (varchar (10)), Did (int, внешний ключ из TestData.dbo.Dinfo).

StageDB.dbo.MockData

Столбцы. В этой таблице существует много столбцов, которые не имеют отношения к тому, что я пытаюсь осуществить. Единственное, что меня интересует, - это столбец, содержащий имена, которые я хочу связать вместе с информацией из таблицы Dinfo. Имя (nvarchar (255), ноль).

TestData.dbo.Dinfo

Столбцы: Did (int, первичный ключ), Donor (varchar (20)).

Образец данных

Из Dinfo:

Did        Donor 
01         Howard L

Из MockData:

Name
Smith J

Желаемые результаты

Iid      Name      Did
01       Smith J   01

Любая помощь или совет будет высоко ценится. Мне бы очень понравилось, если бы кто-нибудь показал мне правильный синтаксис SQL для этого, так как я думаю, что это может быть просто вопросом правильной написания. Кроме того, любые советы или веб-сайты, которые могут помочь мне узнать больше SQL, будут оценены.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 24 апреля 2018

Ошибка в ON a.Name = b.Did Имя столбца может содержать буквы, цифры или специальные символы. Столбец Did содержит только числа или целые числа.

0 голосов
/ 24 апреля 2018

Вам необходимо выяснить, где происходит ошибка.Существует три варианта:

  1. mockdata.name - строка, а NInfo.data - целое число.
  2. . Dinfo.did - строка, а NInfo.did - целое число.

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

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

0 голосов
/ 24 апреля 2018

Изменить это:

ON a.Name = b.Did

К этому:

ON a.Name = CAST(b.Did as varchar(10))

Я подозреваю, что в вашем запросе гораздо больше ошибок с точки зрения получения желаемых результатов, но это должно исправить вашу ошибку.

...