У меня есть 2 таблицы с одинаковыми столбцами, ожидая, что это userId. Я хочу скопировать все данные из первой таблицы во вторую и добавить пользовательский идентификатор пользователя в отсутствующий столбец. Пока безуспешно.
Запрос показан ниже. Вставьте Качество, Количество, Поставщик и UserId (которого нет в таблице при получении данных)
`DECLARE @UserId int = 5611; -- add this to all the data from dbo.GasStation
INSERT INTO dbo.NewGasStation (Quality, Quantity, Supplier, UserId)
SELECT * FROM dbo.GasStation -- UserId doesn't exist in this table
-- Add somehow @UserId to all the data i'm getting from GasStation in order to satisfy the column UserId in the NewGasStation`
Все данные, которые я получаю от dbo.GasStation, должны быть вставлены в dbo.NewGasStation, добавляя этот пользовательский идентификатор пользователя ко всем результатам.
Вместо *
явно укажите столбцы в SELECT
и добавьте переменную в этот список.
DECLARE @userid integer = 5611;
INSERT INTO dbo.newgasstation
(quality,
quantity,
supplier,
userid)
SELECT quality,
quantity,
supplier,
@userid
FROM dbo.gasstation;
@ С.Минчев: Да, это так. Вы можете добавить столько константных выражений, сколько хотите, они не должны существовать в таблице, они даже не могут там существовать. Просто попробуйте.
Хорошо скажите, что студии управления sql "Msg 515, уровень 16, состояние 2, строка 16 не удается вставить значение NULL в столбец "UserId", таблица "Go41_db.dbo.NewGasStation"; столбец не допускает нулевые значения. INSERT не работает. заявление прекращено».
@стикибит . . . Вот это да. Точно в то же время.
Просто добавьте @UserId
в список SELECT
:
INSERT INTO dbo.NewGasStation (Quality, Quantity, Supplier, UserId)
SELECT Quality, Quantity, Supplier, @UserId
FROM dbo.GasStation ;
Это не работает, вы не можете добавить @UserId в конце этого SELECT, потому что его нет в dbo.GasStation
@С.Минчев . . . Хм? Это константа. Конечно, вы можете включить его в SELECT
.
INSERT INTO dbo.NewGasStation (Quality, Quantity, Supplier, UserId)
SELECT Quality, Quantity, Supplier, '5611' FROM dbo.GasStation
должен помочь (при условии, что имена столбцов одинаковы для обеих таблиц)
Убедитесь, что таблица NewGasStation не существует при запуске этого
Select Quality, Quantity, Supplier,5611 as UserId
into NewGasStation
from GasStation
Ну, проблема в том, что уже добавлены некоторые данные, поэтому я не могу этого сделать :)
Вам также не нужно различать столбцы, если вы просто хотите скопировать их все. Просто используйте *
.
Что-то вроде этого:
DECLARE @UserId integer = 5611;
INSERT INTO [Target]
SELECT *, @UserId FROM [Source]
Не работает, потому что @userId не существует в dbo.GasStation