DARK__FOXX Ответов: 2

Хранимая процедура для вставки значения поля, содержащего другие поля из другой таблицы


Привет,

У меня есть эта новая пустая таблица, которая имеет восемь полей под названием Table-X и существующую таблицу под названием Table_Y с разными полями .
В процедуре хранения меня интересуют только два поля Table_Y, которые я должен вставить в table_X.
Мой вопрос заключается в том, как вставить эти поля в новую пустую таблицу, которые также являются полями с разными именами?

Что я уже пробовал:

@ID_CUSTOMER int,
@COMPANY_NAME varchar(50),
@EXP_DATE date,

AS

INSERT INTO TABLE_X(ID_CLI,COMPANY_NAME,EXP_DATE,DTINIT) //DTINT TAKE A DEFAULT VALUE ON DB

SELECT ANCDCF,ANRGSO
FROM TABLE_Y
WHERE TABLE_Y.ANCDCF = @ID_CUSTOMER AND TABLE_Y.ANRGSO = @COMPANY_NAME

Sandeep Mewara

А как насчет EXP_DATE? что тоже может иметь дефолтное vlaue? в основном, какие поля X сопоставляются с Y и как насчет остальных полей X. могут ли они быть пустыми как есть (не обязательно)

DARK__FOXX

EXP_DATE-это не значение по умолчанию , а значение, которое будет вставлено в текстовое поле.
Table_X имеют ID_CUSTOMER и COMPANY_NAME, которые являются ANCDCF и ANRGSO Table_Y, но, как вы можете видеть, у них разные имена.

2 Ответов

Рейтинг:
8

Sandeep Mewara

Основываясь на вашем комментарии, это будет что-то вроде:

@ID_CUSTOMER int,
@COMPANY_NAME varchar(50),
@EXP_DATE date,

AS

INSERT INTO TABLE_X(ID_CLI,COMPANY_NAME,EXP_DATE,DTINIT) 

SELECT 
    ANCDCF, -- ANOTHER TABLE
    ANRGSO, -- ANOTHER TABLE
    @EXP_DATE, -- PASSED FROM UI
    SYSDATETIME(). -- DEFAULT VALUE
FROM 
    TABLE_Y
WHERE 
    TABLE_Y.ANCDCF = @ID_CUSTOMER AND TABLE_Y.ANRGSO = @COMPANY_NAME


Все, что вам нужно, - это убедиться, что счетчик INSERT INTO values такой же, как и в запросе SELECT. Данные могут поступать откуда угодно.
Ссылаться: SQL INSERT INTO SELECT оператор[^]


Рейтинг:
13

Richard Deeming

То SELECT оператор должен указать то же количество столбцов, что и вы INSERTИнг. Имена не имеют значения.

Столбцы, которые вы вставляете, не обязательно должны быть взяты из таблицы, из которой вы выбираете. Вместо этого можно использовать параметры, локальные переменные или функции.

INSERT INTO table_x (ID_CLI, COMPANY_NAME, EXP_DATE, DTINIT)
SELECT ANCDCF, ANRGSO, @EXP_DATE, SYSDATETIME()
FROM table_y
WHERE table_y.ANCDCF = @ID_CUSTOMER
AND table_y.ANRGSO = @COMPANY_NAME;


DARK__FOXX

Могу ли я спросить, как мне запустить его, чтобы увидеть, работает ли он или нет? Спасибо

Richard Deeming

Точно так же, как вы запускаете любую другую хранимую процедуру или SQL-код.

Если вы хотите запустить его вручную из среды SQL Management Studio, вам нужно будет объявить локальные переменные вместо параметров:

DECLARE @ID_CUSTOMER int = 42, @COMPANY_NAME varchar(50) = 'Fenchurch', @EXP_DATE date = SYSDATETIME();