Ошибка: Неверный синтаксис рядом с ','. (Процедура spAddNewDataToHoldingTable, строка 71)Неверный синтаксис рядом с ','. при использовании Exec
Цель: Вставка данных в таблицу (который я создал с помощью другой хранимой процедуры)
Мысли: Я попробовал несколько комбинаций апострофа, и если я получаю 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
Ref:
SQL Server incorrect syntax near ')' Incorrect syntax near '(' and near '='
Ваш список значений содержит запятые, которые не являются частью строки SQL (они не цитироваться) – JohnHC
заменить 'EXEC (@sql)' 'по ВЫБРАТЬ (@sql)' или 'печать @ sql' – McNets
Единственное, что является динамическим, - это имя вашей таблицы, это означает, что вы «делаете это неправильно». У вас созданы динамические таблицы (с теми же столбцами), а не с соответствующей структурой базы данных. – Jamiec