Problems concatening strings

  • Hi all,

    i have this T-SQL

     

    declare @c as varchar(8000)

    SET @c=''

    SELECT @c=@c + dbo.syscolumns.name + '='' + ''"'' + dbo.fn_XMLParser(rtrim(' + rtrim(dbo.syscolumns.name) + ')) + ''"'' + ' + ' '

        FROM dbo.sysobjects

       INNER JOIN dbo.syscolumns

        ON dbo.sysobjects.id = dbo.syscolumns.id

       INNER JOIN dbo.systypes

        ON dbo.syscolumns.xusertype = dbo.systypes.xusertype

       WHERE (dbo.sysobjects.xtype = 'u')

        AND (dbo.sysobjects.name = 'EMPRESA') AND dbo.syscolumns.xusertype<>189 -- No tomo las columnas dle tipo TIMESTAMP

       ORDER BY dbo.syscolumns.colid

    SELECT @c

    SELECT LEN(@c)

    The return of the LEN function is always 4000 !!!!

     

    Otherwise if i write

    declare @c as varchar(8000)

    SET @c=''

    SELECT @c=@c + CAST(dbo.syscolumns.name + '='' + ''"'' + dbo.fn_XMLParser(rtrim(' + rtrim(dbo.syscolumns.name) + ')) + ''"'' + ' + ' ' AS VARCHAR(8000))

        FROM dbo.sysobjects

       INNER JOIN dbo.syscolumns

        ON dbo.sysobjects.id = dbo.syscolumns.id

       INNER JOIN dbo.systypes

        ON dbo.syscolumns.xusertype = dbo.systypes.xusertype

       WHERE (dbo.sysobjects.xtype = 'u')

        AND (dbo.sysobjects.name = 'EMPRESA') AND dbo.syscolumns.xusertype<>189 -- No tomo las columnas dle tipo TIMESTAMP

       ORDER BY dbo.syscolumns.colid

    SELECT @c

    SELECT LEN(@c)

    It's works.

    Why?

    Thanks

  • syscolumns.name is a sysname type. This is a "server defined datatype" which uses nvarchar as its base datatype. So you have to cast to make it work.

  • Thank's Remi, i have just read it at BOL.

     

     

Viewing 3 posts - 1 through 3 (of 3 total)

You must be logged in to reply to this topic. Login to reply