Добавление данных из другого выбранного статуса в существующую таблицу в 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
Другие вопросы по тегам