Error in executing stored procedure:Not a valid identifier

Answered Error in executing stored procedure:Not a valid identifier

  • Tuesday, June 05, 2007 10:21 AM
     
     

    Hey

     

    I have written the following the stored procedure and executed it.But  i am getting the following error. I don't know the reason for this.

     

    set ANSI_NULLS ON

    set QUOTED_IDENTIFIER ON

    go

     

    Create PROCEDURE [dbo].[GSU_Site_ReterieveActiveSitesOnSearch]

    @whereClause nvarchar(2000) 

    AS

    BEGIN

    -- SET NOCOUNT ON added to prevent extra result sets from

    -- interfering with SELECT statements.

     

     

     

    declare @sqlstr as varchar(max)

    set @sqlstr='SELECT Site.siteid as siteid,'

    set @sqlstr=@sqlstr+ 'Site.Sitename as sitename, '

    set @sqlstr= @sqlstr+ 'Customer.customerid,'

    set @sqlstr= @sqlstr+ 'Customer.customername as CustomerName,'

    set @sqlstr= @sqlstr+ 'Site.City as City,'

    set @sqlstr= @sqlstr+ 'site.Address as Address,'

    set @sqlstr =@sqlstr+ 'Site.state , '

    set @sqlstr= @sqlstr+ 'Country.countryid as countryid,'

    set @sqlstr= @sqlstr+ 'Country.countryname as country,Businessunit.businessunitid ,businessunit.businessunitname as BUName,'

    set @sqlstr= @sqlstr+ 'SystemType.SystemTypeID,SystemType.SystemTypeName FROM Site INNER JOIN Country '

    set @sqlstr= @sqlstr+ 'ON Country.countryid = Site.countryid INNER JOIN Customer ON Customer.customerid=Site.customerid '

    set @sqlstr= @sqlstr+ 'INNER JOIN Businessunit ON Businessunit.businessunitID=Site.BusinessUnitID INNER JOIN SystemType ON '

    set @sqlstr= @sqlstr+ 'SystemType.SystemTypeID=Site.SystemTypeID INNER JOIN GSUStatus ON Site.GSUStatusID=GSUStatus.GSUStatusID '

    set @sqlstr= @sqlstr+@whereClause

    --

    --set @sqlstr=@sqlstr+' WHERE GSUStatus.GSUStatusID=' +@GSUStatusID

    --if @BusinessUnitID <> 0

    --set @sqlstr=@sqlstr+'and site.BusinessUnitID ='+@BusinessUnitID

    --if @CountryID <> 0

    --set @sqlstr=@sqlstr+'and site.countryid='+@CountryID

    --if @CustomerID <> 0

    --set @sqlstr=@sqlstr+'and site.customerid='+@CustomerID

    --if @SystemTypeID <> 0

    --set @sqlstr=@sqlstr+'and site.SystemTypeID='+@SystemTypeID

    --if @SiteName <> ''

    --set @sqlstr=@sqlstr+'and site.Sitename like ' + @SiteName

    --if @Address <> ''

    --set @sqlstr=@sqlstr+'site.Address like '+ @Address

    --if @City <> ''

    --set @sqlstr=@sqlstr+'site.City like '+ @City

    --if @State <> ''

    --set @sqlstr=@sqlstr+'and site.state like '+ @State

    print @sqlstr

     

    exec @sqlstr

    END

     

     

     I executed the procedure by pasing parameters

     

    Exec [GSU_Site_ReterieveActiveSitesOnSearch]

    " where GSUStatus.GSUStatusID=1  and site.Sitename like    'lakshmisite' "

     

     

    and getting the following error

     

    -  exc {"The name 'SELECT Site.siteid as siteid,Site.Sitename as sitename, Customer.customerid,Customer.customername as CustomerName,Site.City as City,site.Address as Address,Site.state  , Country.countryid as countryid,Country.countryname as country,Businessunit.businessunitid ,businessunit.businessunitname as BUName,SystemType.SystemTypeID,SystemType.SystemTypeName FROM Site INNER JOIN Country ON Country.countryid = Site.countryid INNER JOIN Customer ON Customer.customerid=Site.customerid INNER JOIN Businessunit ON Businessunit.businessunitID=Site.BusinessUnitID INNER JOIN SystemType ON SystemType.SystemTypeID=Site.SystemTypeID INNER JOIN GSUStatus ON S' is not a valid identifier."} System.Exception {System.Data.SqlClient.SqlException}

     

     

    Please let me know the problem in this.

     

     

    Thanks

    Kusuma

     

     

     

     

     

     

     

     

All Replies

  • Tuesday, June 05, 2007 10:24 AM
     
     

    Hey

     

    I have written the following the stored procedure and executed it.But  i am getting the following error. I don't know the reason for this.

     

    set ANSI_NULLS ON

    set QUOTED_IDENTIFIER ON

    go

     

    Create PROCEDURE [dbo].[GSU_Site_ReterieveActiveSitesOnSearch]

    @whereClause nvarchar(2000) 

    AS

    BEGIN

    -- SET NOCOUNT ON added to prevent extra result sets from

    -- interfering with SELECT statements.

     

     

     

    declare @sqlstr as varchar(max)

    set @sqlstr='SELECT Site.siteid as siteid,'

    set @sqlstr=@sqlstr+ 'Site.Sitename as sitename, '

    set @sqlstr= @sqlstr+ 'Customer.customerid,'

    set @sqlstr= @sqlstr+ 'Customer.customername as CustomerName,'

    set @sqlstr= @sqlstr+ 'Site.City as City,'

    set @sqlstr= @sqlstr+ 'site.Address as Address,'

    set @sqlstr =@sqlstr+ 'Site.state , '

    set @sqlstr= @sqlstr+ 'Country.countryid as countryid,'

    set @sqlstr= @sqlstr+ 'Country.countryname as country,Businessunit.businessunitid ,businessunit.businessunitname as BUName,'

    set @sqlstr= @sqlstr+ 'SystemType.SystemTypeID,SystemType.SystemTypeName FROM Site INNER JOIN Country '

    set @sqlstr= @sqlstr+ 'ON Country.countryid = Site.countryid INNER JOIN Customer ON Customer.customerid=Site.customerid '

    set @sqlstr= @sqlstr+ 'INNER JOIN Businessunit ON Businessunit.businessunitID=Site.BusinessUnitID INNER JOIN SystemType ON '

    set @sqlstr= @sqlstr+ 'SystemType.SystemTypeID=Site.SystemTypeID INNER JOIN GSUStatus ON Site.GSUStatusID=GSUStatus.GSUStatusID '

    set @sqlstr= @sqlstr+@whereClause

    --

    --set @sqlstr=@sqlstr+' WHERE GSUStatus.GSUStatusID=' +@GSUStatusID

    --if @BusinessUnitID <> 0

    --set @sqlstr=@sqlstr+'and site.BusinessUnitID ='+@BusinessUnitID

    --if @CountryID <> 0

    --set @sqlstr=@sqlstr+'and site.countryid='+@CountryID

    --if @CustomerID <> 0

    --set @sqlstr=@sqlstr+'and site.customerid='+@CustomerID

    --if @SystemTypeID <> 0

    --set @sqlstr=@sqlstr+'and site.SystemTypeID='+@SystemTypeID

    --if @SiteName <> ''

    --set @sqlstr=@sqlstr+'and site.Sitename like ' + @SiteName

    --if @Address <> ''

    --set @sqlstr=@sqlstr+'site.Address like '+ @Address

    --if @City <> ''

    --set @sqlstr=@sqlstr+'site.City like '+ @City

    --if @State <> ''

    --set @sqlstr=@sqlstr+'and site.state like '+ @State

    print @sqlstr

     

    exec @sqlstr

    END

     

     

     I executed the procedure by pasing parameters

     

    Exec [GSU_Site_ReterieveActiveSitesOnSearch]

    " where GSUStatus.GSUStatusID=1  and site.Sitename like    'lakshmisite' "

     

     

    and getting the following error

     

    -  exc {"The name 'SELECT Site.siteid as siteid,Site.Sitename as sitename, Customer.customerid,Customer.customername as CustomerName,Site.City as City,site.Address as Address,Site.state  , Country.countryid as countryid,Country.countryname as country,Businessunit.businessunitid ,businessunit.businessunitname as BUName,SystemType.SystemTypeID,SystemType.SystemTypeName FROM Site INNER JOIN Country ON Country.countryid = Site.countryid INNER JOIN Customer ON Customer.customerid=Site.customerid INNER JOIN Businessunit ON Businessunit.businessunitID=Site.BusinessUnitID INNER JOIN SystemType ON SystemType.SystemTypeID=Site.SystemTypeID INNER JOIN GSUStatus ON S' is not a valid identifier."} System.Exception {System.Data.SqlClient.SqlException}

     

     

    Please let me know the problem in this.

     

     

    Thanks

    Kusuma

     

     

     

     

     

     

     

     

  • Tuesday, June 05, 2007 10:31 AM
     
     Answered

     

    First off, I'm not sure why you're constructing a dynamic select inside your procedure...the procedure should be the select statement, using any input parameters you defined.

     

    But to solve the problem, you need to change

     

    exec @sqlstr

     

    to

     

    exec(@sqlstr)

     

     

    I'd rewrite the entire piece of code...

  • Tuesday, June 05, 2007 10:32 AM
     
     

     

    This is a duplicate post.

     

    Please see answer in your other posting.

  • Tuesday, June 05, 2007 10:37 AM
     
     Answered

    Use the following satement to execute the SP,

     

    Code Snippet

    Exec [GSU_Site_ReterieveActiveSitesOnSearch] ' where GSUStatus.GSUStatusID=1  and site.Sitename like    ''lakshmisite'' '

     

  • Tuesday, June 05, 2007 12:49 PM
    Moderator
     
     

    Kusuma,

     

    Instead passing the this value " where GSUStatus.GSUStatusID=1  and site.Sitename like    'lakshmisite' ", use:

     

    ' where GSUStatus.GSUStatusID=1  and site.Sitename like    ''lakshmisite'''

     

    Notice that I am using two apostrophes per each one inside the string.

     

    As you can see, you are setting QUOTED_IDENTIFIER to on, when creating the sp, so anything enclosed by double quote will be interprete as an identifier (name of a column, table, etc.), so when you pass that value to the sp, it will look like

     

    ...

    SystemType.SystemTypeID=Site.SystemTypeID INNER JOIN GSUStatus ON Site.GSUStatusID=GSUStatus.GSUStatusID +

    " where GSUStatus.GSUStatusID=1  and site.Sitename like    'lakshmisite' "

     

    and there is not such identifier in your db.

     

    you can set QUOTED_IDENTIFIER to OFF, but I prefer to leave it as ON and use the other method to escape apostrophes.

     

     

    AMB

  • Tuesday, June 05, 2007 1:59 PM
     
     Answered

    If you call it from any UI, the single quote will be automatically taken care by the providers/ADO classes. (since it is a parameter)

    But when you test the sp, you have to use either escape sequence or as AMB sujest use the QUOTED_IDENTIFER OFF config.

  • Wednesday, June 06, 2007 4:48 AM
     
     

    Thanks Mani :-)

     

    Now it is working.

    There were two problems. One

    1)set QUOTED_IDENTIFIER ON should be OFF

    2)exec @sqlstr should be exec (@sqlstr)

     

     

    Kusuma

  • Wednesday, June 06, 2007 4:53 AM
     
     

    Hai Dalej,

     

    Sorry for posting two times.

     

    I need dynamic query for  a searching -sitenames,Businessunit etc......... ( searching based on columns in a table)

     

    Now the problem is solved by giving exec(@sqlstr) instead of exec @sqlstr.

     

    Thanks for your  help :-)

     

    Kusuma

  • Monday, May 07, 2012 6:08 AM
     
     

    that resolved, thanks