Оператор SELECT в качестве подзапроса в инструкции INSERT INTO

#sql #database #sql-server-2008 #database-design

#sql #База данных #sql-server-2008 #база данных-дизайн

Вопрос:

Будет ли следующий запрос вставлять столько строк, сколько имеется строк в результирующем наборе подзапроса? Если нет, то как я могу заставить вставить n строк, где n — количество строк в результирующем наборе подзапроса?

 INSERT INTO A (x, y)
VALUES (@x, SELECT B.z FROM B)

@x=5
  

Ответ №1:

Нет. Он будет вставлять не более 1 строки. Если вы хотите вставить несколько строк, вам нужно что-то вроде

 INSERT INTO A (x,y) SELECT @X, B.z FROM b
  

Обратите внимание, что в нем нет values предложения, а @x был интегрирован в SELECT запрос

Ответ №2:

Если вы хотите получить все значения, вы могли бы изменить его на:

 INSERT INTO A (x, y) 
SELECT @x, B.z 
FROM B
  

Ответ №3:

Избавьтесь от предложения VALUES. Ваш запрос становится:

 INSERT INTO A (x, y) SELECT @X, B.z FROM B
  

Ответ №4:

Попробуйте это таким образом.

 INSERT INTO A
    (x, y)
    SELECT @x, B.z
        FROM B
  

Ответ №5:

 DECLARE @X int = 5

INSERT INTO A
(
    x,
    y
)
SELECT    
    @X,
    B.Z
FROM B
  

Ответ №6:

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