我在创建 stored procedure in sql server(in bold), 时以斜体显示以下错误
消息156,级别15,状态1,过程IATF_upload_exce,行46关键字'AS'附近的语法不正确 . 消息156,级别15,状态1,过程IATF_upload_exce,第64行关键字'SET'附近的语法不正确 . 消息102,级别15,状态1,过程IATF_upload_exce,行65 ','附近的语法不正确 . 消息102,级别15,状态1,过程IATF_upload_exce,第102行','附近的语法不正确
STORED PROCEDURE
**-- ================================================
-- Template generated from Template Explorer using:
-- Create Procedure (New Menu).SQL
--
-- Use the Specify Values for Template Parameters
-- command (Ctrl-Shift-M) to fill in the parameter
-- values below.
--
-- This block of comments will not be included in
-- the definition of the procedure.
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Shivam_nxf30130
-- Create date: 11April2018
-- Description: IATF_upload_excel
-- =============================================
CREATE PROCEDURE IATF_upload_exce
-- Add the parameters for the stored procedure here
--@p1 int = 0,
--@p2 int = 0
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
DECLARE @name VARCHAR(50) -- database name
--DECLARE @path VARCHAR(256) -- path for backup files
--DECLARE @fileName VARCHAR(256) -- filename for backup
--DECLARE @fileDate VARCHAR(20) -- used for file name
--SET @path = 'C:\Backup\'
--SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)
DECLARE db_cursor CURSOR FOR
(SELECT
AU.id AS audit_id,
AT.id AS audittype_id,
CC.id AS CausingClause_id,
IA.[Finding] AS findings,
IA.[Rating] AS Rating,
IA.[Reach(L/R/G)] AS lr_ind,
IA.[Root_Cause] AS root_cause,
IA.[Corrective_Action] AS corr_action,
IA.[Action_Owner] AS by_whom,
IA.[Remark_Verification] AS remarks,
IA.[Links] AS links,
IA.[Close Date] AS close_date
FROM [dbo].[IMPORT_AUDIT_REPORTS_EXCEL] AS IA,
[dbo].[Causing_Clause] AS CC,
[dbo].[Audit_Type] AS AT,
[dbo].[Audits] AS AU
WHERE IA.ID = CC.name
AND IA.Audit_Type = AT.name
AND IA.Audit_No = AU.id) AS Src
--ON Src.ID = dbo.AUDIT_REPORTS .id
--AND Src.audittype_id = dbo.AUDIT_REPORTS .audittype_id
--AND Src.CausingClause_id = dbo.AUDIT_REPORTS .CausingClause_id
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
---SET @fileName = @path + @name + '_' + @fileDate + '.BAK'
--BACKUP DATABASE @name TO DISK = @fileName
--FETCH NEXT FROM db_cursor INTO @name
if(Src.ID = dbo.AUDIT_REPORTS .id
AND Src.audittype_id = dbo.AUDIT_REPORTS .audittype_id
AND Src.CausingClause_id = dbo.AUDIT_REPORTS .CausingClause_id)
UPDATE SET dbo.AUDIT_REPORTS .[audit_id] = Src.audit_id,
dbo.AUDIT_REPORTS .[category_id] = (SELECT id FROM [dbo].CATEGORIES AS CA WHERE CA.name = Src.Rating),
dbo.AUDIT_REPORTS .[ref_id] = 0,
dbo.AUDIT_REPORTS .[ref_ident] = 'N/A',
dbo.AUDIT_REPORTS .[findings] = Src.findings,
dbo.AUDIT_REPORTS .[corr_action] = Src.corr_action,
dbo.AUDIT_REPORTS .[lr_ind] = Src.lr_ind,
dbo.AUDIT_REPORTS .[by_whom] = Src.by_whom,
dbo.AUDIT_REPORTS .[remarks] = Src.remarks,
dbo.AUDIT_REPORTS .[due_date] = NULL,
dbo.AUDIT_REPORTS .[close_date] = Src.close_date,
dbo.AUDIT_REPORTS .[audittype_id] = Src.audittype_id,
dbo.AUDIT_REPORTS .[root_cause] = Src.root_cause,
dbo.AUDIT_REPORTS .[links] = Src.links,
dbo.AUDIT_REPORTS .[CausingClause_id] = Src.CausingClause_id
Else
INSERT
(
[audit_id],
[category_id],
[ref_id],
[ref_ident],
[findings],
[corr_action],
[lr_ind],
[by_whom],
[remarks],
[due_date],
[close_date],
[audittype_id],
[root_cause],
[links],
[CausingClause_id]
)
VALUES
(
Src.audit_id,
(SELECT id FROM [dbo].CATEGORIES AS CA WHERE CA.name = Src.Rating),
0,
'N/A',
Src.findings,
Src.corr_action,
Src.lr_ind,
Src.by_whom,
Src.remarks,
NULL,
Src.close_date,
Src.audittype_id,
Src.root_cause,
Src.links,
Src.CausingClause_id
);
END
CLOSE db_cursor
DEALLOCATE db_cursor
END
GO**
请帮我解决这个问题 . 提前致谢 .
2 回答
您可能想要检查UPDATE的语法 . 你需要这样的东西:
您的更新语句缺少表引用 . 仅列出3部分列名称是不够的(无论如何这都不是好的做法 . )
FWIW,我想你可以使用MERGE更简单地做到这一点 . 值得一试 .
你现在可以检查我的程序是对还是错 .