You cannot use { for if condition just remove '{'
ALTER PROCEDURE [dbo].[Search]
@one NVARCHAR(50), @two NVARCHAR(50), @three NVARCHAR(50)
SELECT cinfo.ID,
cinfo.Nam,
cinfo.INAM,
cinfo.CA,
cinfo.Form,
cinfo.Std,
cval.Prop,
cval.Cons,
sc.Accep
From dbo.Info AS cinfo
Inner JOIN dbo.values AS cval
ON cinfo.ID = cval.ID
INNER JOIN dbo.Sources AS sc
ON (cval.sID = sc.sID AND sc.Accept = 'A')
**IF @three IS NOT NULL** Remove this line
LEFT JOIN dbo.Synonym AS synm
ON cinfo.ID = synm.ID}
where (cinfo.NAM LIKE '%'[email protected]+'%' OR cinfo.CAS LIKE '%'[email protected]+'%' OR
synm.SynonymID LIKE '%'[email protected]+'%') AND
(cval.PropID = '1' OR
cval.PropID = '2' OR
cval.PropID = '3' OR
cval.PropID = '4' OR)
尝试写 像 IF @three IS NOT NULL ALTER PROCEDURE [dbo]。[Search] @one NVARCHAR(50),@two NVARCHAR(50),@three NVARCHAR(50)
SELECT cinfo.ID,
cinfo.Nam,
cinfo.INAM,
cinfo.CA,
cinfo.Form,
cinfo.Std,
cval.Prop,
cval.Cons,
sc.Accep
From dbo.Info AS cinfo
Inner JOIN dbo.values AS cval
ON cinfo.ID = cval.ID
INNER JOIN dbo.Sources AS sc
ON (cval.sID = sc.sID AND sc.Accept = 'A')
where (cinfo.NAM LIKE '%'[email protected]+'%' OR cinfo.CAS LIKE '%'[email protected]+'%' OR
synm.SynonymID LIKE '%'[email protected]+'%') AND
(cval.PropID = '1' OR
cval.PropID = '2' OR
cval.PropID = '3' OR
cval.PropID = '4' OR)
端 别的 ALTER PROCEDURE [DBO]。[搜索] @One NVARCHAR(50),@two NVARCHAR(50),@three NVARCHAR(50)
SELECT cinfo.ID,
cinfo.Nam,
cinfo.INAM,
cinfo.CA,
cinfo.Form,
cinfo.Std,
cval.Prop,
cval.Cons,
sc.Accep
From dbo.Info AS cinfo
Inner JOIN dbo.values AS cval
ON cinfo.ID = cval.ID
INNER JOIN dbo.Sources AS sc
ON (cval.sID = sc.sID AND sc.Accept = 'A')
LEFT JOIN dbo.Synonym AS synm
ON cinfo.ID = synm.ID}
where (cinfo.NAM LIKE '%'[email protected]+'%' OR cinfo.CAS LIKE '%'[email protected]+'%' OR
synm.SynonymID LIKE '%'[email protected]+'%') AND
(cval.PropID = '1' OR
cval.PropID = '2' OR
cval.PropID = '3' OR
cval.PropID = '4' OR).. rest code
端
来源
2017-04-18 13:11:50
NEO
你不能在'TSQL'中这样做。但是,我们可以编写查询以在两种情况下都得到结果 –