Search code examples
sql-servervbscriptasp-classic

Correct big query doesn't work in ASP Classic?


I am trying to make a table with records from SQL server database in ASP CLASSIC. Query generated in program is correct and in SQL server management studio execute works but when I paste this query to the asp classic web code something is wrong. Microsoft VBScript compilation error '800a0409' Unterminated string constant.

set qry=dbconn.execute (" WITH SqlQuery AS ( SELECT  ROW_NUMBER() OVER( ORDER BY [text3] ASC ) AS Row,  * FROM ( SELECT 
    NotReturnedElements.IDElementuRuchuMagazynowego,
    r.IDRuchuMagazynowego,
    Towar.Nazwa as text1,
    Towar.KodKreskowy as text3,
    r.NrDokumentu as text5,
    r.Data as text6,
    stat.Name as 'Status',
    Kontrahent.Nazwa as text7,
    [Uzytkownik].[NazwaUzytkownika] as 'Twórca dokumentu',
    Towar.[NumerSeryjny] AS 'Numer Seryjny'
from
(
    SELECT IDElementuRuchuMagazynowego, sum(ilosc) as ilosc
    FROM
    (
        SELECT e.IDElementuRuchuMagazynowego, e.ilosc 
        FROM dbo.ElementRuchuMagazynowego e
        INNER JOIN dbo.RuchMagazynowy r ON r.IDRuchuMagazynowego = e.IDRuchuMagazynowego 
        WHERE r.IDRodzajuRuchuMagazynowego = 25 AND r.IDMagazynu = 10

        UNION ALL

        SELECT el_rent.IDElementuRuchuMagazynowego, -rel.Amount as ilosc
        FROM dbo.RentalElementsRelations rel
        INNER JOIN dbo.ElementRuchuMagazynowego el_rent ON rel.IDRentElement = el_rent.IDElementuRuchuMagazynowego
        INNER JOIN dbo.ElementRuchuMagazynowego el_return ON rel.IDReturnElement = el_return.IDElementuRuchuMagazynowego
        INNER JOIN dbo.RuchMagazynowy r ON r.IDRuchuMagazynowego = el_rent.IDRuchuMagazynowego 
        WHERE r.IDRodzajuRuchuMagazynowego = 25 AND r.IDMagazynu = 10
    ) Q
    GROUP BY IDElementuRuchuMagazynowego
    HAVING sum(ilosc) > 0
) NotReturnedElements
INNER JOIN ElementRuchuMagazynowego el_rent ON el_rent.IDElementuRuchuMagazynowego = NotReturnedElements.IDElementuRuchuMagazynowego
INNER JOIN dbo.RentalDocumentLines rent_line ON rent_line.IDRelatedDocumentLine = el_rent.IDElementuRuchuMagazynowego
INNER JOIN RuchMagazynowy r ON r.IDRuchuMagazynowego = el_rent.IDRuchuMagazynowego
INNER JOIN dbo.RentalDocuments rent ON rent.IDDocument = r.IDRuchuMagazynowego
INNER JOIN Towar ON Towar.IDTowaru = el_rent.IDTowaru
LEFT JOIN dbo.RentalStatus stat ON stat.IDRentalStatus = rent.IDStatus
LEFT JOIN Kontrahent ON Kontrahent.IDKontrahenta = r.IDKontrahenta
LEFT JOIN [dbo].[Uzytkownik] ON Uzytkownik.[IDUzytkownika] = r.[IDUzytkownika]
WHERE 
    (NULL IS NULL OR NULL = Kontrahent.IDKontrahenta)
    AND (NULL IS NULL OR NULL = Towar.IDGrupyTowarow)
    AND (NULL IS NULL OR NULL = Towar.IDTowaru) ) AS SubQuery  ) SELECT text1, text3, text5, text6, text7 FROM SqlQuery WHERE Row BETWEEN 1 AND 17") 

Solution

  • ASP classic requires multi-line strings to be terminated and joined with & _ at the end of each line. Here is a short example:

    set qry=dbconn.execute ("SELECT  A.ColumnName " & _
         "from TableName [A] " & _
         "where A.ColumnName = 'Some Value' ")