August 2, 2005 at 10:13 am
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
August 2, 2005 at 10:17 am
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.
August 2, 2005 at 10:22 am
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