SQL 语句插入
Posted
技术标签:
【中文标题】SQL 语句插入【英文标题】:SQL Statement Insert Into 【发布时间】:2018-04-05 01:54:32 【问题描述】:无论我做什么,我都会得到以下任何帮助。
消息 116,第 16 级,状态 1,第 15 行 当子查询不使用 EXISTS 引入时,选择列表中只能指定一个表达式。
消息 109,第 15 级,状态 1,第 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】:如果您想使用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
确定了目标列。
【讨论】:
@larry 这取决于你对worked
这个词的定义。正如我所提到的,你最好在你的子查询中加入一个ORDER BY
子句。以上是关于SQL 语句插入的主要内容,如果未能解决你的问题,请参考以下文章