#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:
Это не сработает. Вы совершаете ту же ошибку, что и при использовании агрегатной функции в многорядном запросе