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 联机丛书中对这一切都有很好的记录......

要么你有INSERT并且VALUES你提供原子值(变量,文字值),例如

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'

但你不能混合这两种风格。选择一个或另一个。

于 2013-08-14T12:45:09.927 回答
1

你可以只有一个选择语句?

不确定这是否适用于您正在尝试做的事情....

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 回答