SQL Server插入命令错误

时间:2013-07-10 16:25:54

标签: sql-server insert exists

INSERT INTO BORCODEME 
  ( BORCODEME.IslemTarihi, BORCODEME.IslemAciklamasi,BORCODEME.IslemTutari) 
VALUES( 
  (SELECT BORCLAR.BorcTarih,BORCLAR.BorcAciklama,BORCLAR.BorcTutari FROM BORCLAR WHERE BORCLAR.BorcMusteriID=6),
  (SELECT ODEMELER.OdemeTarihi,ODEMELER.OdemeAciklama,ODEMELER.OdemeTutar FROM ODEMELER WHERE ODEMELER.OdemeMusteriID=6)
  )

我的SQL命令是这样的,我有这些错误;

  

Msg 116,Level 16,State 1,Line 4
  当子查询未与EXISTS一起引入时,只能在选择列表中指定一个表达式   Msg 116,Level 16,State 1,Line 6
  当子查询未与EXISTS一起引入时,只能在选择列表中指定一个表达式   消息109,级别15,状态1,行1   INSERT语句中的列多于VALUES子句中指定的值。 VALUES子句中的值数必须与INSERT语句中指定的列数相匹配。

1 个答案:

答案 0 :(得分:2)

不确定您真正想要的是什么 - 您是否尝试从两个表中插入三列?然后像这样写INSERT

INSERT INTO BORCODEME(IslemTarihi, IslemAciklamasi, IslemTutari) 
   SELECT 
       BORCLAR.BorcTarih, BORCLAR.BorcAciklama, BORCLAR.BorcTutari 
   FROM 
       BORCLAR 
   WHERE 
       BORCLAR.BorcMusteriID = 6 

   UNION

   SELECT 
       ODEMELER.OdemeTarihi, ODEMELER.OdemeAciklama, ODEMELER.OdemeTutar 
   FROM 
       ODEMELER 
   WHERE 
       ODEMELER.OdemeMusteriID = 6

因此,这将插入来自BORCLAR的三个值和来自ODEMELER的三个值的另一行。

如果你想要什么,那么你需要更详细地解释你真正想要的......

通常, 可以使用以下语法:

INSERT INTO dbo.TargetTable (List-of-Columns)
VALUES (List-of-atomic-values)

如果您无法提供原子值(文字或T-SQL变量),那么您可以使用

INSERT INTO dbo.TargetTable (List-of-Columns)
   SELECT list-of-columns
   FROM dbo.SourceTable

但你无法混合 - 你不能拥有VALUES,然后在其中使用SELECT

在这两种情况下,INSERT语句 中的列数必须与 完全匹配,并提供原子值的数量在VALUES中或SELECT语句

选择的列数