Использование '' в процедуре mysql в операторе выбора mysql, но получение ошибки недопустимого имени столбца - PullRequest
0 голосов
/ 10 июля 2020

Сейчас я пытаюсь создать процедуру, в которой я использую '' для жесткого кодирования определенных значений.

вот часть моего оператора 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», как видно из кода ошибки ниже. и я не совсем уверен, почему. или как я могу заставить его вместо этого использовать 'dummy' в столбце uid.

    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)

1 Ответ

0 голосов
/ 10 июля 2020

Решение заключалось в том, что вместо объявления переменных, от которых я хотел использовать строковые литералы, я мог просто использовать строковые литералы напрямую, используя двойные одинарные кавычки. мой выбор теперь выглядит так:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...