2016-05-05 14 views
4

I wie unten ein Problem mit dynamischer Abfrage habe:Ausgabe in der dynamischen Abfrage

Declare @SQL1 varchar(max) 
Set @SQL1 = ' 
Insert into #TEMPSelect 
SELECT DISTINCT tbAgent.Agent, 
    ... 
    ..., 
    case when coalesce(tbsystemuser.MiddleName, '''') = '''' then tbsystemuser.FirstName + '' '' + tbsystemuser.LastName 
    else tbsystemuser.FirstName + '' '' + tbsysten.MiddleName + '' '' + tbsystemuser.LastName end, 
    tbsystemuser.EmailAddress, 
    tbagent.AgentCode, 
    tbBroker.businessname 
FROM tbSystemUser 
inner JOIN dbo.tbAgent 
    ON tbSystemUser.SystemUser=tbAgent.SystemUser 
WHERE (tbagent.DeletionIndicator=0 and tbsystemuser.SystemRoleType!=10) ' 

If LEN (@Name) >1 
Set @SQL1 = @SQL1 + 'and FullName LIKE ''' + @Name + '''' 
Exec(@SQL1) 

Es gibt nichts zurück! Ich denke, das Problem liegt an coalesce Linie und '' ''.

+2

Nun drucken Sie Ihr dynamisches SQL aus, führen Sie es aus und überprüfen Sie dann, was dazu führt, dass keine Daten zurückgegeben werden. –

+0

In 'tbsysten.MiddleName' ist tbsysten Tabelle nirgendwo definiert! – Arulkumar

Antwort

2

Versuchen Sie, wie diese,

DECLARE @SQL1 VARCHAR(max) = '' 
    ,@Name VARCHAR(100) = 'test' 

SET @SQL1 = 'INSERT INTO #TEMPSelect 
SELECT DISTINCT tbAgent.Agent 
    ,CASE 
     WHEN coalesce(tbsystemuser.MiddleName, '''') = '''' 
      THEN tbsystemuser.FirstName + '' '' + tbsystemuser.LastName 
     ELSE tbsystemuser.FirstName + '' '' + tbsysten.MiddleName + '' '' + tbsystemuser.LastName 
     END AS FULLNAME 
    ,tbsystemuser.EmailAddress 
    ,tbagent.AgentCode 
    ,tbBroker.businessname 
FROM tbSystemUser 
INNER JOIN dbo.tbAgent ON tbSystemUser.SystemUser = tbAgent.SystemUser 
WHERE (
     tbagent.DeletionIndicator = 0 
     AND tbsystemuser.SystemRoleType != 10 
     )' 

IF LEN(@Name) > 1 
    SET @SQL1 = @SQL1 + 'and FullName LIKE ''%' + @Name + '%''' 

EXEC (@SQL1) 

Wie Arulkumar sagte, sollten Sie Aliasnamen für case-Anweisung geben. Verwenden Sie außerdem% in der Anweisung like