lundi 29 juin 2015

Trying to create a large query, keeps getting truncate

I have a SQL query in SQL server where I am trying to create large query with 'union' on a large number of databases. However, the query keeps getting truncated. According to my research this shouldn't happen if all the varchar are cast to varchar(MAX). I tried doing this, however, it still gets truncated. The final query should be in the @finalQuery varible. Can anyone help with the query below?

DECLARE @name VARCHAR(MAX) -- database name  
DECLARE @path VARCHAR(MAX) -- path for backup files  
DECLARE @fileName VARCHAR(MAX) -- filename for backup  
DECLARE @fileDate VARCHAR(MAX) -- used for file name 
DECLARE @executeQuery VARCHAR(MAX)
DECLARE @finalQuery VARCHAR(MAX)

SET @finalQuery = ''
DECLARE db_cursor CURSOR FOR
SELECT name
FROM master..sysdatabases
WHERE name NOT IN (CAST('master' AS VARCHAR(MAX)),CAST('model' AS VARCHAR(MAX)),CAST('msdb' AS VARCHAR(MAX)),CAST('tempdb' AS VARCHAR(MAX)))  
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN




SET @executeQuery=CAST('SELECT TOP 1000 
      [EmailAddress] as ''Email Address''
      ,[FirstName] as ''First Name''
      ,[LastName] as ''Last Name''
      ,[LastLogin] as ''Last Login'',
        Name as ''User Role''
  FROM '+@name+'.[dbo].[User] c
  INNER JOIN 
  (SELECT * FROM '+@name+'.[dbo].[SecurityRole] as a 
  INNER JOIN '+@name+'.[dbo].[SecurityRoleToUser] as b
  ON (a.ID=b.SecurityRoleID)
  ) d

  ON (c.ID=d.UserID)
  WHERE IsActive=1' AS VARCHAR(MAX))


  --PRINT @executeQuery
 -- PRINT @name
  --PRINT @executeQuery
  SET @finalQuery = CAST(@executeQuery+' UNION ALL ' +@finalQuery AS VARCHAR(MAX))
  --PRINT @executeQUery
    --EXEC (@executeQuery)
FETCH NEXT FROM db_cursor INTO @name

END
CLOSE db_cursor
DEALLOCATE db_cursor
PRINT @finalQuery
--EXEC(@finalQuery)

Aucun commentaire:

Enregistrer un commentaire