Добавление данных из другого выбранного статуса в существующую таблицу в SQL Server 2005
Я беру данные из этого утверждения
SELECT 'NONSTK' AS [FormType]
,S.[NonStockCode] AS [KeyField]
,'EBQ001' AS [FieldName]
,NULL AS [AlphaValue]
,1 AS [NumericValue]
,NULL AS [DateValue]
FROM [SysproCompanyA].[dbo].[QotNonStock] S
LEFT OUTER JOIN [SysproCompanyA].[dbo].[AdmFormData] N
ON S.[NonStockCode] = N.[KeyField]
WHERE ( N.[FormType] = 'NONSTK'
OR N.[FormType] IS NULL
)
AND N.[KeyField] IS NULL
и пытается вставить его следующим образом
INSERT INTO [SysproCompanyT].[dbo].[AdmFormData]
( [FormType]
,[KeyField]
,[FieldName]
,[AlphaValue]
,[NumericValue]
,[DateValue]
)
SELECT 'NONSTK' AS [FormType]
,S.[NonStockCode] AS [KeyField]
,'EBQ001' AS [FieldName]
,NULL AS [AlphaValue]
,1 AS [NumericValue]
,NULL AS [DateValue]
FROM [SysproCompanyA].[dbo].[QotNonStock] S
LEFT OUTER JOIN [SysproCompanyA].[dbo].[AdmFormData] N
ON S.[NonStockCode] = N.[KeyField]
WHERE ( N.[FormType] = 'NONSTK'
OR N.[FormType] IS NULL
)
AND N.[KeyField] IS NULL
Который возвращает следующее
Подзапрос вернул более 1 значения. Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.
Я думал, что сделал это раньше, но я не могу приблизиться к этому.
Так можно ли это сделать? Тем временем я начну свой курсор usp, чтобы сделать одну вставку за раз
1 ответ
Все
Пожалуйста, смотрите комментарии выше. Однако, чтобы обойти мою проблему, я использовал курсор вперед, как это
--This cusor reads from one select statement result set
--loads data from result set in variable on a loop basis
-- and inserts into the existing sql table
-- Declare variable to hold insert data
--REMEMBER THE SEMICOLONS!!!
DECLARE @NonStockCode varchar(80);
--Declare cusor
DECLARE InsertCursor CURSOR FAST_FORWARD
For
SELECT S.[NonStockCode]
FROM [SysproCompanyA].[dbo].[QotNonStock] S
left outer join [SysproCompanyA].[dbo].[AdmFormData] N On S.[NonStockCode]=N.[KeyField]
where (N.[FormType]='NONSTK' or N.[FormType] is null)
and N.[FieldName] <>'MOU001';
--Open Cusor
OPEN InsertCursor;
--Read first row of data and store in variables
FETCH NEXT FROM InsertCursor INTO @NonStockCode;
Print @NonStockCode; --Test print
--Now use loop to process result set of cusor
WHILE @@FETCH_STATUS = 0
BEGIN
Print 'NONSTK'+' ' +@NonStockCode+'MOU001'; --Test print
INSERT INTO [SysproCompanyA].[dbo].[AdmFormData]
([FormType] ,[KeyField],[FieldName],[AlphaValue],[NumericValue] ,[DateValue])
VALUES ('NONSTK',@NonStockCode,'MOU001' ,'99',null ,null );
FETCH NEXT FROM InsertCursor INTO @NonStockCode;
END
--Now Close and deallocate the cursor MUST HAPPEN
CLOSE InsertCursor;
DEALLOCATE InsertCursor;
Go