Sql server sql insert into: INSERT (Transact-SQL) — SQL Server

Как выполнить межсерверную вставку в SQL Server?

Задавать вопрос

спросил

Изменено
2 года, 11 месяцев назад

Просмотрено
571 раз

У меня 3 таблицы на 2 серверах.

  1. Таблица A на сервере A
  2. Таблица B на сервере B
  3. Таблица C на сервере B

Сервер A и сервер B связаны.

Таблица A:

 Количество фруктов Общая цена
яблоко 2 4
банан 4 12
Оранжевый 6 24
 

Таблица B:

 Цена за единицу фруктов
яблоко 2
банан 3
Оранжевый 4
 

Таблица C:

 Фрукты Количество Цена за единицу Общая цена
Яблоко 2 2 4
Банан 4 3 12
Оранжевый 6 4 24
 

Мне нужно извлечь данные из таблицы A в таблицу C.
Мне также нужно обратиться к таблице B, чтобы получить цену за единицу, которая необходима для таблицы C.
Я сделал следующее:

 вставил в [Server B].[DatabaseName].[SchemaName].[Table C]
выбирать
Фрукты, Количество, '', Общая Цена
из таблицы А
 

Но я все еще не могу получить цену за единицу фруктов.
Могу ли я узнать, какой запрос я могу использовать, чтобы получить цену за единицу и ввести ее в запрос выбора выше?

  • sql
  • sql-сервер
  • связанный сервер

7

Чтобы получить полный ответ, вы можете сделать это:

 вставить в [Server B].[DatabaseName].[SchemaName].[Table C]
выберите a.Фрукты, a.Количество, b.[цена за единицу], a.[Общая цена]
из таблицы А
присоединиться к [Server B].[DatabaseName].[SchemaName].[Table B] B на A.fruit = B.fruit
 

Объяснение

Вы соединяете таблицу a с таблицей b , чтобы получить цену за единицу от b и остальные данные от до . Это можно использовать для вставки данных в c

Этот запрос может работать для вас.

 вставить в [Server B].[DatabaseName].[SchemaName].[Table C]
выбирать
A. [Фрукты], A. [Количество], B. [Цена за единицу], A. [Общая цена]
из А присоединиться к Б
ON A.[Фрукты] = B.[Фрукты]
 
 с темп. как
    (
    выбирать
    A.Фрукты, A.Количество, B.[Цена за единицу], A.[Общая цена]
    из [Server A].[DatabaseName].[SchemaName].[Table A]
    внутреннее соединение [Server B].[DatabaseName].[SchemaName].[Table B] на A.Fruit=B.Fruit
    )
    вставить в [Server B].[DatabaseName].[SchemaName].[Table C]
    выберите A.Fruit, A.Quantity, B.[UnitPrice], A.[Общая цена] из temp
---Или---
    вставить в [Server B].[DatabaseName].[SchemaName].[Table C]
    выберите A.Фрукты, A.Количество, B.[Цена за единицу], A.[Общая цена]
    из [Server A].[DatabaseName].[SchemaName].[Table A]
    внутреннее соединение [Server B].[DatabaseName].[SchemaName].[Table B] на A.Fruit=B.Fruit
 

Конечно, вы можете сделать это с помощью Linked Server sp_addlinkedserver

Я полагаю, вы уже настроили его

2

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но никогда не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.

[Решено] Запрос сервера sql для вставки даты рождения и идентификатора электронной почты?

0,00/5 (Нет голосов)

Узнать больше:

SQL

SQL-сервер-2008

создать таблицу mst_reg
(id int не нулевой идентификатор (1,1),
Имя varchar(80),
Фамилия varchar(80),
Отчество varchar(80),
Квалификация varchar(80),
Адрес электронной почты varchar(80),
Телефонный номер
)

вставить в значения mst_reg(‘aqib’,’javid’,’nijamudeen’,’BTechIT’,’[email protected]’,965557017796)

при выполнении запроса на вставку данных в отображаемую таблицу

Сообщение 8115, уровень 16, состояние 2, строка 1
Ошибка арифметического переполнения при преобразовании выражения в тип данных int.
Заявление было прекращено.» пожалуйста, помогите мне

Добавить решение


3 решения

  • Самые популярные

  • Самые последние

Решение 1

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

ВСТАВЬТЕ В mst_reg (Имя, Фамилия, Отчество, Квалификация, Emailid, Phno) ЗНАЧЕНИЯ («aqib», «javid», «nijamudeen», «BTechIT», «[email protected]», 965557017796) 

Но, пожалуйста, если вы делаете это с помощью языка высокого уровня, не забудьте использовать параметризованные запросы! Не объединяйте строки для создания команды SQL. Это оставляет вас открытыми для случайной или преднамеренной атаки SQL Injection, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы

Решение 2

Вы также сохраняете поле phno как целое число, существует ограничение на размер числа, хранящегося в числовых полях, сохраняйте его как текст.

Решение 3

Привет,
Вы можете иметь свой телефон не до 10 цифр, так как сама ошибка предполагает, что арифметическое переполнение.