T-Dynamischen Sql-Query-String Begrenzen
Bin ich immer eine seltsame Ausnahme sagen"
"
Msg 203, Level 16, State 2, Line 53
The name 'SELECT
ISNULL(ESP.ID,-1) AS 'PayScaleID',
ISNULL(E.Prefix,'') + ISNULL(E.SerialNo,0) AS 'Token number',
ISNULL(E.FirstName,'')+' '+ ISNULL(E.MiddleName,'')+' '+ISNULL(E.LastName,'') AS 'Employee name',
ISNULL(E.CostCentreCode,'') AS 'Cost centre code',
ESP.TotalPresentDays AS 'Present days',
ESP.TotalWeeklyOffDays AS 'Week offs',
ESP.TotalPaidHolidays AS 'Paid holiDays',
ESP.TotalAbsentDays AS 'Absent days',
ESP.ArrearDays AS 'Arrear days',
ESP.OTHours AS 'OTHours',
ESP.TotalPaidAmount AS 'Total Amount',
MAD.Name AS 'Allowance' ,
X.Amount
INTO #temp
FROM
(
SELECT
-1 AS 'BillingI' is not a valid identifier."
Ich bin ausführen der folgenden Abfrage.
"
{
DECLARE @sql AS VARCHAR(8000)
SET @sql = 'SELECT
ISNULL(ESP.ID,-1) AS ''PayScaleID'',
ISNULL(E.Prefix,'''') + ISNULL(E.SerialNo,0) AS ''Token number'',
ISNULL(E.FirstName,'''')+'' ''+ ISNULL(E.MiddleName,'''')+'' ''+ISNULL(E.LastName,'''') AS ''Employee name'',
ISNULL(E.CostCentreCode,'''') AS ''Cost centre code'',
ESP.TotalPresentDays AS ''Present days'',
ESP.TotalWeeklyOffDays AS ''Week offs'',
ESP.TotalPaidHolidays AS ''Paid holiDays'',
ESP.TotalAbsentDays AS ''Absent days'',
ESP.ArrearDays AS ''Arrear days'',
ESP.OTHours AS ''OTHours'',
ESP.TotalPaidAmount AS ''Total Amount'',
MAD.Name AS ''Allowance'' ,
X.Amount
INTO #temp
FROM
(
SELECT
-1 AS ''BillingID'',
ESP.ID AS ''EmployeeSalaryPaidID'',
MAd.ID AS ''AllowanceID'',
ESPD.PaidAmount AS ''Amount''
FROM Employee_SalaryPaid ESP
INNER JOIN Employee_SalaryPaidDetails ESPD ON ESPD.EmployeeSalaryPaidID = ESP.ID
INNER JOIN Employee E ON E.ID = ESP.EmployeeID
INNER JOIN Master_AllowanceDeduction MAD ON MAD.ID = ESPD.AllowanceDeductionID
WHERE ESP.YearAndMonth =201104
UNION ALL
SELECT
CBR.ID AS ''BillingID'',
CBRD.EmployeeSalaryPaidID,
CBRD.AllowanceDeductionID AS ''AllowanceID'',
CBRD.Amount AS ''Amount''
FROM Company_BillRaised CBR
INNER JOIN Company_BillRaisedDetails CBRD ON CBRD.BillRaisedID = CBR.ID
WHERE CBR.MonthYear =201104
)X
INNER JOIN Master_AllowanceDeduction MAD ON MAD.ID = X.AllowanceID
INNER JOIN Employee_SalaryPaid ESP ON ESP.ID =X.EmployeeSalaryPaidID
INNER JOIN Employee E ON E.ID= ESP.EmployeeID
INNER JOIN dbo.vw_CompanyEmployeeIDs CE ON CE.EmployeeID = E.ID
WHERE CE.BranchID =73
DROP TABLE #temp'
EXEC @sql
}
Kann ich nicht verstehen, was genau das problem ist? Wir haben einige Grenzen der Zeichen, die während der Ausführung der Dynamischen Sql wie ich es Tue. Ich versuchte drucken, was ich bin immer in @Sql, kann ich die Ergebnisse bekommen, was ich Suche. Aber wenn ich wie diese mit EXEC @Sql es gibt mir die Fehlermeldung.
Irgendwelche Vorschläge?
- Haben Sie als wählen Sie eine Antwort ? 5 Fragen, 0 Kredit. Die Leute arbeiten hier kostenlos nur die Punkte als Zahlungsmittel. Die am wenigsten Sie tun können, ist geben Kredit, in dem Kredit passend ist
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen
Deklarieren von @sql nvarchar(max)
dann
statt
Ausführung der dynamischen sql mit nur exec ist sehr begrenzt. Finden Sie unter diesem link http://www.sommarskog.se/dynamic_sql.html.
Versuchen Sie, Ihre Letzte Zeile zu
EXEC (@sql)
.Quelle:
@Sql
betrachtet wird, enthält den Namen einer gespeicherten Prozedur, die Sie beabsichtigen, zu führen.Können Sie verwenden:
Ausführen oder exec:
EXEC (@sql)
Dem system gespeicherten Prozedur
sp_execute
. Vorteile: zusätzliche Parameter in der syntax, und überprüfen Sie die Datentypen, die vor der Ausführung:execute sp_execute @sql