我只是在原始列为空时尝试在fabcon表中设置一个列。
这是我已经尝试过的代码。
UPDATE dbo.fabcon
SET ext = COALESCE(ext, ( SELECT CASE WHEN [<3] IS NOT NULL THEN '3' END AS extent
FROM dbo.spreadsheetData ))
这是我得到的错误:
子查询返回的值超过1。当子查询跟在=, !=, <, <= , >, >=
之后或子查询用作表达式时,不允许这样做。
谁能看到我出错的地方?
感谢。 :)
编辑:两个表fabcon和spreadsheetData由一个名为main1
的列链接EDIT2:我已将查询更新为:
UPDATE dbo.fabcon
SET ext = (SELECT CASE WHEN [<3] IS NOT NULL THEN '3' END
FROM dbo.spreadsheetData ssd
WHERE ssd.id = fabcon.id
)
WHERE ext IS NULL;
然而,它仍然失败并出现同样的错误。
答案 0 :(得分:0)
您需要表格fabcon
和spreadsheetData
之间的链接。假设它被称为id
:
UPDATE dbo.fabcon
SET ext = (SELECT CASE WHEN [<3] IS NOT NULL THEN '3' END)
FROM dbo.spreadsheetData ssd
WHERE ssd.id = fabcon.id
)
WHERE ext IS NULL;
请注意,我删除了coalesce()
并将其替换为where
子句以进行更新。这可以防止查询不必要地更新行(使用未更改的值)。
答案 1 :(得分:0)
DECLARE @PAth INT
Select @path = COALESCE(ext,'')+[<3]+';' FROM dbo.spreadsheetData
UPDATE dbo.fabcon
SET ext = CASE WHEN @PAth IS NOT NULL
THEN '3' ELSE ''
END AS Extent
FROM dbo.fabcon f WHERE f.id = @path
可能是我想的作品
答案 2 :(得分:0)
这对你有用。假设我已正确理解您的原始查询
UPDATE dbo.fabcon
SET
ext = ssd.[column to insert data from]
FROM
dbo.spreadsheetData ssd
WHERE
ext IS NULL
AND
fabcon.id = ssd.id
这假设ssd表中的id是fabcon表中的id。否则,只需根据列规范更改id匹配
答案 3 :(得分:0)
UPDATE dbo.fabcon
SET ext = (SELECT TOP 1 CASE WHEN [<3] IS NOT NULL THEN '3' END
FROM dbo.spreadsheetData ssd
WHERE ssd.main1 = fabcon.main1
ORDER BY 1
)
WHERE ext IS NULL;
通过“main1”(如现在所示)相关的2个表以及为避免错误而引入的任意“TOP 1”,这可能有用。
但是:获得答案的最佳方式是提供一些样本数据和预期结果