使用'';在mysql过程中的mysql select语句中,但获取无效列名时出错

使用'';在mysql过程中的mysql select语句中,但获取无效列名时出错,mysql,stored-procedures,Mysql,Stored Procedures,我当前正在尝试创建一个过程,在该过程中,我使用“”对某些值进行硬编码 这是我的select语句的一部分 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE [dbo].[TWSValuationStagingGAPC] AS SET LANGUAGE english DECLARE @date char(10); DECLARE @transactiondate char(10); DECLARE @tempDat

我当前正在尝试创建一个过程,在该过程中,我使用“”对某些值进行硬编码

这是我的select语句的一部分

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[TWSValuationStagingGAPC]
AS
SET LANGUAGE english
DECLARE @date char(10);
DECLARE @transactiondate char(10);
DECLARE @tempDate DATETIME = CONVERT(varchar, GETDATE(), 23);
DECLARE @tableName as char(50);
DECLARE @currentYear as char(4);
DECLARE @currentMonth as char(50);
DECLARE @dummy as char(50);
DECLARE @risk           as char(50);
DECLARE @TopDmValuation as char(50);
DECLARE @AKT_SUL_TAE    as char(50);
DECLARE @DIS            as char(50);
DECLARE @GAPC           as char(50);
DECLARE @WAISOL         as char(50);
DECLARE @N030           as char(50);
DECLARE @S030           as char(50);
DECLARE @SDIT           as char(50);
DECLARE @RUNSOL         as char(50);
DECLARE @T14U_01        as char(50);
DECLARE @t              as char(50);
DECLARE @f              as char(50);
DECLARE @0              as char(50);
SET @date = EOMONTH(@tempDate, -1);
SET @transactiondate= dateadd(day,1,EOMONTH(@tempDate, -1));
SET @currentYear = DATEPART ( yyyy , GETDATE());  
SET @currentMonth = datename (m, getDate());
SET @tableName = 'input' + @currentYear + @currentMonth; 
SET @dummy = 'dummy';
SET @risk  = 'risk';
SET @TopDmValuation  = 'TopDmValuation';
SET @AKT_SUL_TAE  = 'AKT_SUL_TAE';
SET @DIS  = 'DIS';
SET @GAPC  = 'GAPC';
SET @WAISOL  = 'WAISOL';
SET @N030  = 'N030';
SET @S030  = 'S030';
SET @SDIT  = 'SDIT';
SET @RUNSOL  = 'RUNSOL';
SET @T14U_01  = 'T14U_01';
SET @t  = 't';
SET @f  = 'f';
SET @0 = '0';
DECLARE @longstring nvarchar(max);
EXEC('
BEGIN
Insert Into ValuationStaging.[dbo].' + @tableName + ' 
select Distinct 
' + @dummy + ' as UID
,null as DMCREATETIME
,null as COBABS
,null as COBABSDATE
,null as COBPCT
,null as COBSTEP
,null as AGECHILDVESTING
,lcv.PREMIUMTIMESPEC_SELECTEDENDAGE as AGEPREMIUMEND
,lcv.BENEFITTIMESPEC_SELECTEDENDAGE as AGETERMINATIONBENEFIT
,lcv.RISKTIMESPEC_SELECTEDENDAGE as AGETERMINATIONRISK
,lcv.BENEFITTIMESPEC_SELECTEDSTARTAGE as AGEVESTING
,ob.BENEFIT as BENEFIT
,null as BENEFITRELATIONPC
,null as BONUSDISTRIBUTIONRULE
,null as COBTYPE
,p.[CENTRALREGISTRATION_REGISTRATION] as CPRNUMBERLIFE1
,null as CPRNUMBERLIFE2
,let.COMMITDATE as EVENTCOMMITDATE
,let.EVENTDATE as EVENTDATE
,lei.LIFEEVENTSORTNO as EVENTSORTNO
,null as FREQUENCYANNUITY
,lpv.SELECTEDPREMIUMFREQUENCY as FREQUENCYPREMIUM
,lcv.LIFECOVERSTATE as INFORCEINDICATOR
,null as INSURANCECLASS
,null as LENGHTOFINSTALLMENT
,cf.NAME as LIFEBASIS
,lcv.uid as LIFECOVERVERSIONUID
,let.uid as LIFEEVENTTRANSUID
,lpa.uid as LIFEPACKAGEUID
,lpv.uid as LIFEPOLICYVERSIONUID
,' + @risk + '  as LINEOFBUSINESS
,ob.uid as OPTIMIZATIONBALANCEUID
,null as ORIGINALINCEPTIONDATE
,null as ORIGINALPREMIUMTYPEMEMBERSYSTEM
,SUBSTRING(lpa.LEGALGROUPID, 4, 1) as PARTICIPATIONGROUPCOST
,SUBSTRING(lpa.LEGALGROUPID, 1, 1) as PARTICIPATIONGROUPINTEREST
,SUBSTRING(lpa.LEGALGROUPID, 2, 1) as PARTICIPATIONGROUPRISK
,null as PAYMENTDATE
,lp.id as POLICYNUMBER
,PREMIUM as PREMIUM
,lpv.LIFEPOLICYSTATUS  as PREMIUMSTATUSMEMBERSYSTEM
,null as REGULATIONSNUMBER
,ob.FIRSTORDERBALANCE as RESERVE1ORDER
,ob.SECONDORDERBALANCE as RESERVE2ORDER
,ob.RESERVEACCOUNT_UID  as RESERVEACCOUNTUID
,lcv.BENEFITTIMESPEC_SELECTEDSTARTAGE as RETIREMENTAGEINPUT
,ob.GLDIM1 as REWARDID
,null as SAVINGSCOVER
,null as SHADOW
,0 as SOLIDARYPRICE -- always 0 for non solidaryCovers
,null as STARTMONTHANNUITY
,null as STARTMONTHPREMIUM
,null as STATEMEMBERSYSTEM
,null as SUBSCRIPTIONDATE
,null as SUMATRISKDEAD
,null as SUMATRISKDEAD_CO
,null as SUMATRISKDISABILITY
,null as TAXCODE
,null as TECHNICALBENEFITSTARTDATE
,null as TECHNICALPREMIUMENDDATE
,null as TECHNICALRISKENDDATE
,null as EXPIRYMONTH
,' + @TopDmValuation + ' as DTYPE
,SETTLEMENTFEE as SETTLEMENTFEE
,null as BONUS
然而,mysql出于某种原因认为我引用的是一个名为“dummy”的列,如下面的错误代码所示。我不太清楚为什么。或者如何让它在uid列中使用'dummy'

    Msg 207, Level 16, State 1, Line 150
    Invalid column name 'GAPC'.
    Msg 207, Level 16, State 1, Line 150
    Invalid column name 'GAPC'.
    Msg 207, Level 16, State 1, Line 179
    Invalid column name 'DIS'.
    Msg 207, Level 16, State 1, Line 180
    Invalid column name 'GAPC'.
    Msg 207, Level 16, State 1, Line 181
    Invalid column name 'GAPC'.
    Msg 207, Level 16, State 1, Line 182
    Invalid column name 'WAISOL'.
    Msg 207, Level 16, State 1, Line 183
    Invalid column name 'N030'.
    Msg 207, Level 16, State 1, Line 183
    Invalid column name 'SDIT'.
    Msg 207, Level 16, State 1, Line 184
    Invalid column name 'S030'.
    Msg 207, Level 16, State 1, Line 184
    Invalid column name 'RUNSOL'.
    Msg 207, Level 16, State 1, Line 186
    Invalid column name 'T14U_01'.
    Msg 207, Level 16, State 1, Line 187
    Invalid column name 't'.
    Msg 207, Level 16, State 1, Line 187
    Invalid column name 'f'.
    Msg 207, Level 16, State 1, Line 8
    Invalid column name 'dummy'.
    Msg 207, Level 16, State 1, Line 38
    Invalid column name 'risk'.
    Msg 207, Level 16, State 1, Line 70
    Invalid column name 'TopDmValuation'.
    Msg 207, Level 16, State 1, Line 107
    Invalid column name 'AKT_SUL_TAE'.
    Msg 213, Level 16, State 1, Line 6
在我使用的where子句中也会出现同样的错误

 and ( lcv.LIFECOVERTYPEREF IN (' + @GAPC + ') or lcv.lifecovertyperef is null)

解决方案是,我不需要声明我想要使用字符串文本的变量,而只需要使用双单引号直接使用字符串文本。 我的选择现在如下所示:

EXEC('
BEGIN
Insert Into ValuationStaging.[dbo].' + @tableName + ' 
select Distinct 
''dummy'' as UID
,null as DMCREATETIME
,null as COBABS
,null as COBABSDATE
,null as COBPCT
,null as COBSTEP
,null as AGECHILDVESTING
,lcv.PREMIUMTIMESPEC_SELECTEDENDAGE as AGEPREMIUMEND
,lcv.BENEFITTIMESPEC_SELECTEDENDAGE as AGETERMINATIONBENEFIT
,lcv.RISKTIMESPEC_SELECTEDENDAGE as AGETERMINATIONRISK
,lcv.BENEFITTIMESPEC_SELECTEDSTARTAGE as AGEVESTING
,ob.BENEFIT as BENEFIT
,null as BENEFITRELATIONPC
,null as BONUSDISTRIBUTIONRULE
,null as COBTYPE
,p.[CENTRALREGISTRATION_REGISTRATION] as CPRNUMBERLIFE1
,null as CPRNUMBERLIFE2
,let.COMMITDATE as EVENTCOMMITDATE
,let.EVENTDATE as EVENTDATE
,lei.LIFEEVENTSORTNO as EVENTSORTNO
,null as FREQUENCYANNUITY
,lpv.SELECTEDPREMIUMFREQUENCY as FREQUENCYPREMIUM
,lcv.LIFECOVERSTATE as INFORCEINDICATOR
,null as INSURANCECLASS
,null as LENGHTOFINSTALLMENT
,cf.NAME as LIFEBASIS
,lcv.uid as LIFECOVERVERSIONUID
,let.uid as LIFEEVENTTRANSUID
,lpa.uid as LIFEPACKAGEUID
,lpv.uid as LIFEPOLICYVERSIONUID
,''risk''  as LINEOFBUSINESS
,ob.uid as OPTIMIZATIONBALANCEUID
,null as ORIGINALINCEPTIONDATE
,null as ORIGINALPREMIUMTYPEMEMBERSYSTEM
,SUBSTRING(lpa.LEGALGROUPID, 4, 1) as PARTICIPATIONGROUPCOST
,SUBSTRING(lpa.LEGALGROUPID, 1, 1) as PARTICIPATIONGROUPINTEREST
,SUBSTRING(lpa.LEGALGROUPID, 2, 1) as PARTICIPATIONGROUPRISK
,null as PAYMENTDATE
,lp.id as POLICYNUMBER
,PREMIUM as PREMIUM
,lpv.LIFEPOLICYSTATUS  as PREMIUMSTATUSMEMBERSYSTEM
,null as REGULATIONSNUMBER
,ob.FIRSTORDERBALANCE as RESERVE1ORDER
,ob.SECONDORDERBALANCE as RESERVE2ORDER
,ob.RESERVEACCOUNT_UID  as RESERVEACCOUNTUID
,lcv.BENEFITTIMESPEC_SELECTEDSTARTAGE as RETIREMENTAGEINPUT
,ob.GLDIM1 as REWARDID
,null as SAVINGSCOVER
,null as SHADOW
,0 as SOLIDARYPRICE -- always 0 for non solidaryCovers
,null as STARTMONTHANNUITY
,null as STARTMONTHPREMIUM
,null as STATEMEMBERSYSTEM
,null as SUBSCRIPTIONDATE
,null as SUMATRISKDEAD
,null as SUMATRISKDEAD_CO
,null as SUMATRISKDISABILITY
,null as TAXCODE
,null as TECHNICALBENEFITSTARTDATE
,null as TECHNICALPREMIUMENDDATE
,null as TECHNICALRISKENDDATE
,null as EXPIRYMONTH
,''TopDmValuation'' as DTYPE

SSMS与SQL Server一起使用,而不是MySQL。字符串文本需要用单引号括起来。但是无论如何,您应该使用参数而不是字符串连接。