The customer had an issue with a custom CRM 4.0 report.
It seems this error occured now because the SQL Server run with 2008 instead of 2005 or the report indeed had a bug. (Thanks to SQL Profiler, I found it.)
The customer had this error coming up:
Query execution failed for dataset '....'.
Incorrect syntax near '20140913'
After analysing the report XML I figured out the problem:
DECLARE @SQL AS NVARCHAR(MAX)
SET @SQL = '
SELECT
CRMAF_FilteredAccount.accountid,
CRMAF_FilteredContact.firstname,
CRMAF_FilteredContact.jobtitle,
CRMAF_FilteredContact.lastname,
CRMAF_FilteredContact.telephone1
FROM (' + @CRM_FilteredAccount + ') AS CRMAF_FilteredAccount INNER JOIN FilteredContact AS CRMAF_FilteredContact
ON CRMAF_FilteredAccount.accountid = CRMAF_FilteredContact.parentcustomerid
ORDER BY CRMAF_FilteredContact.lastname'
EXEC(@SQL)
The red must be replaced with:
DECLARE @SQL AS NVARCHAR(MAX)
SET @SQL = '
SELECT
CRMAF_FilteredAccount.accountid,
CRMAF_FilteredContact.firstname,
CRMAF_FilteredContact.jobtitle,
CRMAF_FilteredContact.lastname,
CRMAF_FilteredContact.telephone1
FROM (' + @CRM_FilteredAccount + ') AS CRMAF_FilteredAccount INNER JOIN (' + @CRM_FilteredContact + ') AS CRMAF_FilteredContact
ON CRMAF_FilteredAccount.accountid = CRMAF_FilteredContact.parentcustomerid
ORDER BY CRMAF_FilteredContact.lastname'
EXEC(@SQL)
And I had to insert the appropriate and equivalent new report and query parameter for it.
SQL Profiler Output:
exec sp_executesql N'declare @binUserGuid varbinary(128)
declare @userGuid uniqueidentifier
select @userGuid = N''{2691f84a-3327-e111-926d-001e0bd1e5c0}''
set @binUserGuid = cast(@userGuid as varbinary(128))
set context_info @binUserGuid
--DECLARE @CRM_FilteredAccount AS NVARCHAR(MAX)
--SET @CRM_FilteredAccount = ''select * from filteredaccount''
DECLARE @SQL AS NVARCHAR(MAX)
SET @SQL = ''
SELECT
CRMAF_FilteredAccount.accountid,
CRMAF_FilteredContact.firstname,
CRMAF_FilteredContact.jobtitle,
CRMAF_FilteredContact.lastname,
CRMAF_FilteredContact.telephone1
FROM ('' + @CRM_FilteredAccount + '') AS CRMAF_FilteredAccount INNER JOIN (select contact0.* from FilteredContact as contact0 where ( contact0.modifiedonutc >= ''20140913 22:00:00'' and contact0.modifiedonutc <= ''20141014 12:05:42'' )) as CRMAF_FilteredContact
ON CRMAF_FilteredAccount.accountid = CRMAF_FilteredContact.parentcustomerid
ORDER BY CRMAF_FilteredContact.lastname''
EXEC(@SQL)',N'@CRM_FilteredAccount nvarchar(156)',@CRM_FilteredAccount=N'select account0.* from FilteredAccount as account0 where ( account0.modifiedonutc >= ''20140913 22:00:00'' and account0.modifiedonutc <= ''20141014 12:05:42'' )'
The important difference is how the parameters will be replaced in the final query (red).
It seems this error occured now because the SQL Server run with 2008 instead of 2005 or the report indeed had a bug. (Thanks to SQL Profiler, I found it.)
The customer had this error coming up:
Query execution failed for dataset '....'.
Incorrect syntax near '20140913'
After analysing the report XML I figured out the problem:
DECLARE @SQL AS NVARCHAR(MAX)
SET @SQL = '
SELECT
CRMAF_FilteredAccount.accountid,
CRMAF_FilteredContact.firstname,
CRMAF_FilteredContact.jobtitle,
CRMAF_FilteredContact.lastname,
CRMAF_FilteredContact.telephone1
FROM (' + @CRM_FilteredAccount + ') AS CRMAF_FilteredAccount INNER JOIN FilteredContact AS CRMAF_FilteredContact
ON CRMAF_FilteredAccount.accountid = CRMAF_FilteredContact.parentcustomerid
ORDER BY CRMAF_FilteredContact.lastname'
EXEC(@SQL)
The red must be replaced with:
DECLARE @SQL AS NVARCHAR(MAX)
SET @SQL = '
SELECT
CRMAF_FilteredAccount.accountid,
CRMAF_FilteredContact.firstname,
CRMAF_FilteredContact.jobtitle,
CRMAF_FilteredContact.lastname,
CRMAF_FilteredContact.telephone1
FROM (' + @CRM_FilteredAccount + ') AS CRMAF_FilteredAccount INNER JOIN (' + @CRM_FilteredContact + ') AS CRMAF_FilteredContact
ON CRMAF_FilteredAccount.accountid = CRMAF_FilteredContact.parentcustomerid
ORDER BY CRMAF_FilteredContact.lastname'
EXEC(@SQL)
And I had to insert the appropriate and equivalent new report and query parameter for it.
SQL Profiler Output:
exec sp_executesql N'declare @binUserGuid varbinary(128)
declare @userGuid uniqueidentifier
select @userGuid = N''{2691f84a-3327-e111-926d-001e0bd1e5c0}''
set @binUserGuid = cast(@userGuid as varbinary(128))
set context_info @binUserGuid
--DECLARE @CRM_FilteredAccount AS NVARCHAR(MAX)
--SET @CRM_FilteredAccount = ''select * from filteredaccount''
DECLARE @SQL AS NVARCHAR(MAX)
SET @SQL = ''
SELECT
CRMAF_FilteredAccount.accountid,
CRMAF_FilteredContact.firstname,
CRMAF_FilteredContact.jobtitle,
CRMAF_FilteredContact.lastname,
CRMAF_FilteredContact.telephone1
FROM ('' + @CRM_FilteredAccount + '') AS CRMAF_FilteredAccount INNER JOIN (select contact0.* from FilteredContact as contact0 where ( contact0.modifiedonutc >= ''20140913 22:00:00'' and contact0.modifiedonutc <= ''20141014 12:05:42'' )) as CRMAF_FilteredContact
ON CRMAF_FilteredAccount.accountid = CRMAF_FilteredContact.parentcustomerid
ORDER BY CRMAF_FilteredContact.lastname''
EXEC(@SQL)',N'@CRM_FilteredAccount nvarchar(156)',@CRM_FilteredAccount=N'select account0.* from FilteredAccount as account0 where ( account0.modifiedonutc >= ''20140913 22:00:00'' and account0.modifiedonutc <= ''20141014 12:05:42'' )'
The important difference is how the parameters will be replaced in the final query (red).
Comments
Post a Comment