пробел в операторе выбора в динамическом запросе - PullRequest
2 голосов
/ 01 сентября 2011

У меня динамический запрос, подобный этому:

SET @str_Query = 'SELECT SIM.Item_ID,
                  SIM.Item_Description,
                  SU.Short_Description AS Unit,
                  SIM.Std_Lead_Time,'+
                  '' ''+' AS Last_Purchase_Rate
                  FROM  FKMS_Item_Master AS SIM
                        INNER JOIN FKMS_STP_Units SU
                        ON SIM.Item_Purchase_Unit=SU.Unit_Id' +
                 ' WHERE ' + @str_Condition + 
                            ' AND SIM.Location_Id =' + CAST(@aint_Location_Id AS VARCHAR(10)) +
                            ' AND SIM.Item_Deleted =0 
                              AND SIM.Approved_On IS NOT NULL'  
                +' ORDER BY SIM.Item_Description'   

Я хочу получить пространство как Last_Purchase_Rate

Показывает синтаксическую ошибку в части '' '' + 'AS Last_Purchase_Rate когда я выполню этот запрос. Если я распечатаю этот динамический запрос, запрос кажется правильным. Он отображается как AS Last_Purchase_Rate с пробелом перед AS. Пожалуйста, помогите.

Ответы [ 4 ]

2 голосов
/ 01 сентября 2011

Я бы написал

...SIM.Std_Lead_Time, '' '' AS Last_Purchase_Rate...

вместо

...SIM.Std_Lead_Time,'+'' ''+' AS Last_Purchase_Rate...
1 голос
/ 01 сентября 2011

Почему бы не использовать NULL вместо пробела, а затем обработать результат в вашем приложении?

То есть

SET @str_Query = 'SELECT SIM.Item_ID,
              SIM.Item_Description,
              SU.Short_Description AS Unit,
              SIM.Std_Lead_Time,
              NULL AS Last_Purchase_Rate, -- and so on.

Вы также можете использовать CHAR (32):

SET @str_Query = 'SELECT SIM.Item_ID,
              SIM.Item_Description,
              SU.Short_Description AS Unit,
              SIM.Std_Lead_Time,
              CHAR(32) AS Last_Purchase_Rate, -- and so on.
1 голос
/ 01 сентября 2011

Вы не избежали всех кавычек.

Рабочая версия вашего заявления будет

SET @str_Query = 'SELECT SIM.Item_ID,
                  SIM.Item_Description,
                  SU.Short_Description AS Unit,
                  SIM.Std_Lead_Time,'
                  + ''' '''
                  + ' AS Last_Purchase_Rate
                  FROM  FKMS_Item_Master AS SIM
                        INNER JOIN FKMS_STP_Units SU
                        ON SIM.Item_Purchase_Unit=SU.Unit_Id' +
                 ' WHERE ' + @str_Condition + 
                            ' AND SIM.Location_Id =' + CAST(@aint_Location_Id AS VARCHAR(10)) +
                            ' AND SIM.Item_Deleted =0 
                              AND SIM.Approved_On IS NOT NULL'  
                +' ORDER BY SIM.Item_Description'   

но я обнаружил, что с небольшим переформатированием ошибку легче обнаружить

SET @str_Query = 
    'SELECT SIM.Item_ID '
    + ', SIM.Item_Description '
    + ', SU.Short_Description AS Unit '
    + ', SIM.Std_Lead_Time '
    + ', '' ''' + ' AS Last_Purchase_Rate '
    + 'FROM  FKMS_Item_Master AS SIM '
    + '      INNER JOIN FKMS_STP_Units SU '
    + '                   ON SIM.Item_Purchase_Unit=SU.Unit_Id ' 
    + ' WHERE ' + @str_Condition 
    + '       AND SIM.Location_Id = ' + CAST(@aint_Location_Id AS VARCHAR(10)) 
    + '       AND SIM.Item_Deleted =0 '
    + '       AND SIM.Approved_On IS NOT NULL '  
    + ' ORDER BY SIM.Item_Description '   
0 голосов
/ 01 сентября 2011

Попробуйте использовать функцию tsql SPACE(1)

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