我在一个表中有一个列,其中有一些名称对于它所连接的网站来说太大了。任何50或更大的东西都会导致问题。我已经写了这个,试图缩短基于添加make + model +四年的数字。我在while循环中遇到更新问题。也许我应该使用临时表并且接近这个完全错误。谢谢你的帮助。
SELECT *
FROM [Year] y
INNER JOIN Year_Model ym
ON y.YearId = ym.YearId
INNER JOIN Model m
on m.ModelId = ym.ModelId
INNER JOIN Make ma
on ma.MakeId = m.MakeId
--WHERE (len(m.name) + len(ma.name) + 4)>= 50
WHILE (len(m.name) + len(ma.name) + 4)>= 50
BEGIN
DECLARE @ModelId integer;
SET @ModelId = m.ModelId
DECLARE @NewModelName string;
SET @NewModelName = (Select Left(m.name, (len(m.name)-1))
UPDATE m
SET m.name = @NewModelName
WHERE @ModelId = m.ModelId
END
GO
答案 0 :(得分:2)
不要缩短任何东西。您可能需要其他名称的完整名称。
您可以使用t-sql left()函数选择前x个字符。或者,您可以选择整个名称并使用应用程序代码根据需要对其进行格式化。
答案 1 :(得分:1)
试试这个:
UPDATE [Model] SET [name]=xx.ShortName
FROM
(
SELECT m.ModelID,LEFT(m.name,len(m.name)-1) as ShortName
FROM [Year] y
INNER JOIN Year_Model ym ON y.YearId = ym.YearId
INNER JOIN Model m on m.ModelId = ym.ModelId
INNER JOIN Make ma on ma.MakeId = m.MakeId
WHERE (len(m.name) + len(ma.name) + 4)>= 50
) xx
WHERE xx.ModelID = [Model].ModelId
注意:LEFT应该是 LEFT(m.name,len(m.name)-1)
不是原版 的 LEFT(m.Name,LEN(m.Name(-1)))强>
但是,在运行实际的udpate之前,首先运行内部查询以确保看到所需的结果...