SQL语句插入到

时间:2018-04-05 01:54:32

标签: sql sql-server-2008 select-into

无论我做什么,我都会得到以下任何帮助都会很棒。

  

Msg 116,Level 16,State 1,Line 15
  当未使用EXISTS引入子查询时,只能在选择列表中指定一个表达式。

     

Msg 109,Level 15,State 1,Line 1
  INSERT语句中的列多于VALUES子句中指定的值。 VALUES子句中的值数必须与INSERT语句中指定的列数相匹配。

我的查询

[tableA].[PROJECTID],
[tableA].[STUDYID],
[tableA].[SUBJNO],
[tableA].[CASENUMBER],
[tableA].[CASESTATUS],
[tableA].[MODIFIEDBY]
)VALUES((
SELECT b.PROJECTID, 
((SELECT TOP 1 a.STUDYID FROM [PRODVIEW] a WHERE a.DYNAME = b.DYNAME and 
a.ProjID = b.PROJID)) as STUDYID, 
b.SUBJNO, 
(b.SUBJNO + '_' + b.SEQUENCE) as CaseNumber, 
'READY' as CASESTATUS, 
b.UPLOADEDBY 
FROM [dbo].[TableB] b WHERE VIEWED = 0 
AND b.UPLOADEDDATE >=  DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)))

1 个答案:

答案 0 :(得分:1)

如果您想使用SELECT作为INSERT的数据来源,请不要使用VALUES来插入文字数据:

INSERT INTO yourTable ([PROJECTID], [STUDYID], [SUBJNO], [CASENUMBER], [CASESTATUS],
    [MODIFIEDBY])
SELECT
    b.PROJECTID, 
    (SELECT TOP 1 a.STUDYID FROM [PRODVIEW] a
     WHERE a.DYNAME = b.DYNAME and a.ProjID = b.PROJID),
    b.SUBJNO, 
    (b.SUBJNO + '_' + b.SEQUENCE),
    'READY',
    b.UPLOADEDBY
FROM [dbo].[TableB] b
WHERE
    VIEWED = 0 AND
    b.UPLOADEDDATE >=  DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0);

可能有一种方法可以在select子句中不使用相关子查询来编写查询,例如:通过加入。实际上,带有TOP的子查询毫无意义,因为没有ORDER BY子句。

另请注意,您不需要在SELECT语句中使用别名。实际上,它们将被忽略,因为INSERT确定了目标列。