Sql server 如何修复';IF语句';附近的语法错误;?
当我试图用CTE创建这样的存储过程时:Sql server 如何修复';IF语句';附近的语法错误;?,sql-server,tsql,if-statement,stored-procedures,Sql Server,Tsql,If Statement,Stored Procedures,当我试图用CTE创建这样的存储过程时: CREATE PROCEDURE bng_normalize_ps @ps_id uniqueidentifier, @u_name VARCHAR(50), @u_type VARCHAR(50) AS BEGIN WITH My_Recursive (link, n_type, n_name, F_Parent ) AS ( SELECT i.link
CREATE PROCEDURE bng_normalize_ps
@ps_id uniqueidentifier,
@u_name VARCHAR(50),
@u_type VARCHAR(50)
AS
BEGIN
WITH My_Recursive (link, n_type, n_name, F_Parent )
AS
(
SELECT
i.link
, t.C_Name n_type
, i.C_Name as n_name
, s.F_Parent
FROM ED_Network_Items i
JOIN ES_Network_Items_Types t on i.F_Network_Items_Types = t.LINK
JOIN ED_Network_Struct s on s.F_Child = i.LINK
WHERE
i.link = @ps_id
UNION ALL
SELECT
i.link
, t.C_Name n_type
, i.C_Name as n_name
, s.F_Parent
FROM ED_Network_Items i
JOIN ES_Network_Items_Types t on i.F_Network_Items_Types = t.LINK
JOIN ED_Network_Struct s on s.F_Child = i.LINK
JOIN My_Recursive r ON s.F_Parent = r.link
)
IF EXISTS(SELECT n_name FROM My_Recursive r WHERE n_name LIKE '%' + @u_name + '%' AND n_type = @u_type GROUP BY n_name HAVING COUNT(*) > 1)
BEGIN
SELECT CONCAT('DELETE DOUBLES for ', @u_type, ' ', @u_name)
RETURN
END
SELECT link, n_type, n_name, F_Parent
FROM My_Recursive r
WHERE
n_name LIKE '%' + @u_name + '%'
AND n_type = @u_type
END
SQL Server返回:
If语句附近的语法错误
我在调查手册,没发现出什么事。此代码有什么问题?使用
@@rowcount
而不是exist
CREATE PROCEDURE bng_normalize_ps
@ps_id uniqueidentifier,
@u_name VARCHAR(50),
@u_type VARCHAR(50)
AS
BEGIN
WITH My_Recursive (link, n_type, n_name, F_Parent )
AS
(
SELECT
i.link
, t.C_Name n_type
, i.C_Name as n_name
, s.F_Parent
FROM ED_Network_Items i
JOIN ES_Network_Items_Types t on i.F_Network_Items_Types = t.LINK
JOIN ED_Network_Struct s on s.F_Child = i.LINK
WHERE
i.link = @ps_id
UNION ALL
SELECT
i.link
, t.C_Name n_type
, i.C_Name as n_name
, s.F_Parent
FROM ED_Network_Items i
JOIN ES_Network_Items_Types t on i.F_Network_Items_Types = t.LINK
JOIN ED_Network_Struct s on s.F_Child = i.LINK
JOIN My_Recursive r ON s.F_Parent = r.link
)SELECT n_name FROM My_Recursive r WHERE n_name LIKE '%' + @u_name + '%' AND n_type = @u_type GROUP BY n_name HAVING COUNT(*) > 1
IF @@rowcount > 0
BEGIN
SELECT CONCAT('DELETE DOUBLES for ', @u_type, ' ', @u_name)
RETURN
END
SELECT link, n_type, n_name, F_Parent
FROM My_Recursive r
WHERE
n_name LIKE '%' + @u_name + '%'
AND n_type = @u_type
END
WITH
是一个表达式,后面必须跟一个SELECT
或DML语句。CTE后面必须跟一个引用部分或全部CTE列的SELECT、INSERT、UPDATE、MERGE或DELETE语句。CTE也可以在CREATE VIEW语句中指定,作为视图的defining SELECT语句的一部分