【发布时间】:2017-02-22 13:53:20
【问题描述】:
问题: ',' 附近的语法不正确。 (过程 spAddNewDataToHoldingTable,第 71 行)
目标:将数据插入表(我通过另一个存储过程创建)
想法:我尝试了一些撇号组合,如果我让 SQL 运行,那么这意味着在第一个值之前没有撇号,因此会出错。
我希望一个撇号在错误的地方就是它的全部。
如果我没有变量名,我可以在没有 EXEC 的情况下运行,但我也想让它变得安全。
代码:
USE [DB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[spAddNewDataToHoldingTable]
@sTableName varchar(50),
@sPMNUM varchar(8),
@sUPRN varchar(510) ,
@sSurveyDate Date,
@sVFMDISCIPLINE varchar(4) ,
@sVFMDISCIPLINEELEMENT varchar(510) ,
@sWorkOrder varchar(510) ,
@sNextSurveyDue Date ,
@sRiskCategory varchar(510) ,
@sDocURL varchar(MAX) ,
@sDocLinks varchar(MAX) ,
@sVINCIRISKLevel varchar(510) ,
@sRemedialActionWO varchar(510) ,
@sRemedialActionDate date,
@sComments varchar(MAX) ,
@sRISKNUM varchar(510) ,
@sRISKOWNER varchar(510) ,
@sSurveyorsComments varchar(MAX) ,
@sRecommendations varchar(510) ,
@sStatusOfIssue int ,
@sClientContract varchar(12) ,
@sJPNUM varchar(12)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @sTablename_ AS varchar(max)
SET @sTablename_ = LTRIM(RTRIM(@sTableName))
DECLARE @sql NVARCHAR(2500)
SET @sql = '
INSERT INTO ' + @sTablename_ + '
(
PMNUM,
UPRN,
VFMDISPLINE,
VFMDISPLINEELEMENT,
WorkOrder,
RiskCategory,
DocURL,
DocLinks,
VINCIRISKLevel,
RemedialActionWO,
Comments,
RISKNUM,
RISKOWNER,
SurveyorsComments,
Recommendation,
StatusOfIssue,
ClientContract,
JPNUM,
RemedialActionDate ,
SurveyDate ,
NextSurveyDate
)
VALUES
('''
+ ''' + QUOTENAME(@sPMNUM) + '''
, ''' + QUOTENAME(@sUPRN) + '''
, ''' + QUOTENAME(@sVFMDISCIPLINE) + '''
, ''' + QUOTENAME(@sVFMDISCIPLINEELEMENT) + '''
, ''' + QUOTENAME(@sWorkOrder) + '''
, ''' + QUOTENAME(@sRiskCategory) + '''
, ''' + QUOTENAME(@sDocURL) + '''
, ''' + QUOTENAME(@sDocLinks) + '''
, ''' + QUOTENAME(@sVINCIRISKLevel) + '''
, ''' + QUOTENAME(@sRemedialActionWO) + '''
, ''' + QUOTENAME(@sComments) + '''
, ''' + QUOTENAME(@sRISKNUM) + '''
, ''' + QUOTENAME(@sRISKOWNER) + '''
, ''' + QUOTENAME(@sSurveyorsComments) + '''
, ''' + QUOTENAME(@sRecommendations) + '''
, ''' + QUOTENAME(@sStatusOfIssue + '''
, ''' + QUOTENAME(@sClientContract) + '''
, ''' + QUOTENAME(@sJPNUM) + '''
, ''' + QUOTENAME(@sRemedialActionDate) + '''
, ''' + QUOTENAME(@sSurveyDate) + '''
, ''' + QUOTENAME(@sNextSurveyDue) + '''
+ ''')'''
EXEC (@sql)
END
参考:
SQL Server incorrect syntax near ')' Incorrect syntax near '(' and near '='
【问题讨论】:
-
您的值列表包含不属于 SQL 字符串的逗号(它们没有被正确引用)
-
将
EXEC (@sql)替换为SELECT (@sql)或print @sql -
唯一动态的是你的表名,表明你“做错了”。您已经创建了动态表(具有相同的列)而不是正确的数据库结构。
标签: sql sql-server stored-procedures sql-server-2012