1

基本的に2つのテーブルがありますが、問題は、テーブルAの列AからテーブルBの列Cにデータを挿入したいということです.

しかし、これをしようとするとエラーが発生します

私のサブクエリは次のとおりです。

SELECT TOP 1 [Id] 
From [A]
Where [B] = 'ValueCon'

そして、ここに私の挿入クエリがあります

INSERT INTO [B]
       ([BA]
       ,[BB]
       )
VALUES
       ('TestData'
       ,(SELECT TOP 1 [Id] 
        From [A]
        Where [AB] = 'ValueCon')

       )

すべて一致しているため、データ型について心配する必要はありません。

次のエラーが表示されます。

このコンテキストでは、サブクエリは許可されていません。スカラー式のみが許可されます。

これを回避するための複雑な方法を数多く見てきましたが、単純なものが必要なだけです。

4

3 に答える 3

2

宣言されたパラメーターを使用する場合は、それを INSERT に使用できます

DECLARE @theInsertedId INT;

SELECT TOP 1 @theInsertedId=[Id] 
From [A]
Where [B] = 'ValueCon'

INSERT INTO [B]
       ([BA]
       ,[BB]
       )
VALUES
       ('TestData'
       ,@theInsertedId

       )

下手な英語でごめんなさい!この助けを願っています!

于 2013-08-14T12:39:33.203 に答える
2

INSERT!の適切な構文を読んでください。それはすべて、SQL Server Books Online で非常によく文書化されています ....

アトミック値 (変数、リテラル値)を持っているINSERTVALUESまたは提供します。

INSERT INTO [B] ([BA], [BB])
VALUES ('TestData', @SomeVariable)

またはINSERT ... SELECT、別のテーブルから列を選択するアプローチを使用しています (また、リテラル値を混在させることもできます)。

INSERT INTO [B] ([BA], [BB])
   SELECT    
       TOP 1 'TestData', [Id]
   FROM [A]
   WHERE [AB] = 'ValueCon'

ただし、2 つのスタイルを混在させることはできません。どちらかを選んでください。

于 2013-08-14T12:45:09.927 に答える
1

単一の select ステートメントを使用できますか?

これがあなたがやろうとしていることでうまくいくかどうかわからない....

declare @a table 
(
ab varchar(20),
id varchar(20)
)

insert @a
select 'ValueCon',1
union all
select 'ValueCon',2
union all
select 'Con',100

declare @b table 
(
ba varchar(20),
bb varchar(20)
) 


insert @b (ba,bb)
select top 1 'TestData',id from @a where ab='Valuecon'

select * from @a
select * from @b
于 2013-08-14T12:40:15.640 に答える