T-Sql Ограничение строки динамического запроса - PullRequest
1 голос
/ 23 июля 2011

Я получаю странное исключение, говоря " «

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."

Я выполняю следующий запрос. «

{

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 

}

Я не могу понять, в чем конкретно проблема? Есть ли у нас некоторые ограничения символов при выполнении Dynamic Sql, как я делаю. Я попытался напечатать то, что я получаю в @Sql, я могу получить результаты, которые я ищу. Но когда я делаю так, используя EXEC @Sql, это выдает мне ошибку.

Есть предложения?

Ответы [ 3 ]

5 голосов
/ 23 июля 2011

Try Объявление @sql как nvarchar (max) тогда

exec sp_executesql @sql

вместо

exec @sql

Выполнение динамического SQL только с exec очень ограничено. Смотрите эту ссылку http://www.sommarskog.se/dynamic_sql.html.

4 голосов
/ 23 июля 2011

Попробуйте изменить последнюю строку на EXEC (@sql).

Execute a character string
{ EXEC | EXECUTE } 
    ( { @string_variable | [ N ]'tsql_string' } [ + ...n ] )
    [ AS { LOGIN | USER } = ' name ' ]
[;]

Источник:

1 голос
/ 04 марта 2013

Вы можете использовать:

  1. Выполнить или выполнить: EXEC (@sql)

  2. Системная хранимая процедура sp_execute. Преимущества: можно использовать дополнительные параметры в синтаксисе и проверять типы данных перед выполнением: execute sp_execute @sql

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...