【发布时间】:2018-08-28 13:23:41
【问题描述】:
我遇到了一个 ELSE 语法错误,非常感谢第二双眼睛告诉我哪里出了问题!我正在使用 SSMS v17.3。我收到的消息是:
消息 156,级别 15,状态 1,第 98 行
关键字“ELSE”附近的语法不正确。
第 98 行是 go 之前的最后一个 ELSE。在整个语句的结尾上方大约 6 行。提前谢谢你!
DECLARE @GroupID uniqueidentifier
DECLARE @fCompID int
DECLARE @fPropID int
DECLARE @fCompGUID uniqueidentifier
Set @GroupID = 'E63DC5E7-C8C8-4EA3-B1BF-75712DD83EF4'
SET @fCompID = '0'
SET @fPropID = '0'
WHILE @fCompID <= '999'
BEGIN
IF @fCompID = (SELECT fID FROM tSCCompany WHERE fID = @fCompID)
SET @fCompGUID = (SELECT fCompanyID FROM tSCCompany WHERE fID = @fCompID)
WHILE @fPropID <='999'
BEGIN
IF @fPropID = (SELECT fID FROM tSCProperty WHERE fID = @fPropID AND fCompanyID = @fCompGUID)
BEGIN
INSERT INTO zPropTest(fGroupID, fPropertyID)
Select @GroupID, (select fPropertyID from tSCProperty where fID = @fPropID AND fCompanyID = @fCompGUID)
SET @fPropID = @fPropID + 1
END
ELSE
BEGIN
SET @fPropID = @fPropID + 1
END
END
ELSE
BEGIN
SET @fCompID = @fCompID + 1
SET @fPropID = '0'
END
END
GO
【问题讨论】:
-
您忘记使用 BEGIN AND END 指示第一个 if 块。尝试在
SET @fCompGUID = (SELECT fCompanyID FROM tSCCompany WHERE fID = @fCompID)之前写 BEGIN 并在结尾while之后写 END -
旁白:看起来您已经学习了一门过程语言,并且正在将这些课程应用于 SQL。 SQL 最适合用于处理数据集并允许数据库优化实际处理,例如使用
insert into zPropTest ( fGroupId, fPropertyId ) select @GroupId, tSCPropertyId from tSCProperty where fCompanyId = @fCompGUID where fPropertyId <= 999;。您还在混合数据类型,例如@fCompId < '999'根据data type precedence 的规则将int与字符串进行比较。
标签: tsql if-statement while-loop sql-server-2012