Hi guys,I'm trying to make a dynamic sql statement, but it doesn't work. (In the code pasted under this I've only worked with the first statement, so the rest of the variables aren't correctly set in the sp_executesql statement). I reckon I will manage the rest if someone could just help me past the first issue(s) in the "fornavn" part. I would also love to hear it if there's a better way of tackling this problem.Even though the printed statement looks right, I get the following when printing it out and then executing:USE [Maria]GODECLARE @return_value intEXEC @return_value = [dbo].[Maria_SearchMedlem] @fornavn = N'la'--, --@fornavn_eksakt = NULL, --@etternavn = NULL, --@etternavn_eksakt = NULLSELECT 'Return Value' = @return_valueGOSELECT Medlemmer.medlemsnummer, Medlemmer.fornavn, Medlemmer.etternavn, Medlemmer.adresse1, Medlemmer.adresse2, Medlemmer.postnummer, Medlemmer.sted, Medlemmer.tittel, Medlemmer.fdato, Medlemmer.epost, Medlemmer.tlf_priv, Medlemmer.tlf_jobb, Medlemmer.tlf_mob, Medlemmer.utmeldt_bevis, Medlemmer.utmeldt, Medlemmer.levert_emblem, Medlemmer.død, Medlemmer.død_melding, Medlemmer.død_status, Medlemmer.ordensgrad, Land.landFROM Medlemmer LEFT OUTER JOIN Land ON Medlemmer.land = Land.id WHERE 1=1 and fornavn like '%' + @fornavn_input + '%'Msg 102, Level 15, State 1, Line 1Incorrect syntax near ','.(1 row(s) affected)
To me, that looks pretty valid...Could someone please point out the problem with that? The whole sproc is like this:USE [Maria]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOALTER PROCEDURE [dbo].[Maria_SearchMedlem] @medlemsnummer int = null,@fornavn nvarchar(100) = null,@fornavn_eksakt bit = null,@etternavn nvarchar(100) = null,@etternavn_eksakt bit = null,@adresse1 nvarchar(MAX) = null,@adresse2 nvarchar(MAX) = null,@postnummer nchar(10) = null,@sted nvarchar(50) = null,@land int = null,@tittel nvarchar(MAX) = null,@fdato_fra date = null,@fdato_til date = null,@epost nvarchar(MAX) = null,@tlf_priv nvarchar(20) = null,@tlf_jobb nvarchar(20) = null,@tlf_mob nvarchar(20) = null,@utmeldt_bevis bit = null,@utmeldt_fra date = null,@utmeldt_til date = null,@levert_emblem bit = null,@dod_fra date = null,@dod_til date = null,@dod_melding_fra date = null,@dod_melding_til date = null,@dod_status nvarchar(MAX) = null,@ordensgrad_fra date = null,@ordensgrad_til date = nullASBEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON;declare @base_query nvarchar(max)set @base_query = 'SELECT Medlemmer.medlemsnummer, Medlemmer.fornavn, Medlemmer.etternavn, Medlemmer.adresse1, Medlemmer.adresse2, Medlemmer.postnummer, Medlemmer.sted, Medlemmer.tittel, Medlemmer.fdato, Medlemmer.epost, Medlemmer.tlf_priv, Medlemmer.tlf_jobb, Medlemmer.tlf_mob, Medlemmer.utmeldt_bevis, Medlemmer.utmeldt, Medlemmer.levert_emblem, Medlemmer.død, Medlemmer.død_melding, Medlemmer.død_status, Medlemmer.ordensgrad, Land.landFROM Medlemmer LEFT OUTER JOIN Land ON Medlemmer.land = Land.id' declare @params nvarchar(max)set @params = ' WHERE 1=1' if ((@fornavn is not null) AND (@fornavn <> '')) begin if @params <> '' set @params = @params + ' and ' if @fornavn_eksakt = 1 set @params = @params + 'fornavn = @fornavn_input' else set @params = @params + 'fornavn like ' + char(39) + '%' + char(39) + ' + @fornavn_input + ' + char(39) + '%' + CHAR(39) endif ((@etternavn is not null) AND (@etternavn <> '')) begin if @params <> '' set @params = @params + ' and ' if @etternavn_eksakt = 1 set @params = @params + 'etternavn = \@etternavn' else set @params = @params + 'etternavn like ' + char(39) + '%' + char(39) + ' + @etternavn_input + ' + char(39) + '%' + CHAR(39) endif @adresse1 is not null begin if @params <> '' set @params = @params + ' and ' set @params = @params + 'adresse1 like ' + char(39) + '%' + char(39) + ' + @adresse1_input + ' + char(39) + '%' + CHAR(39) endif @adresse2 is not null begin if @params <> '' set @params = @params + ' and ' set @params = @params + 'adresse2 like ' + char(39) + '%' + char(39) + ' + @adresse2_input + ' + char(39) + '%' + CHAR(39) end if @postnummer is not null begin if @params <> '' set @params = @params + ' and ' set @params = @params + 'postnummer = @postnummer' endif @sted is not null begin if @params <> '' set @params = @params + ' and ' set @params = @params + 'sted like ' + char(39) + '%' + char(39) + ' + @sted_input + ' + char(39) + '%' + CHAR(39) endif @land is not null begin if @params <> '' set @params = @params + ' and ' set @params = @params + 'land like ' + char(39) + '%' + char(39) + ' + @land_input + ' + char(39) + '%' + CHAR(39) endif @tittel is not null begin if @params <> '' set @params = @params + ' and ' set @params = @params + 'tittel like ' + char(39) + '%' + char(39) + ' + @tittel_input + ' + char(39) + '%' + CHAR(39) endif @fdato_fra is not null begin if @params <> '' set @params = @params + ' and ' if @fdato_til is not null set @params = @params + 'fdato > @fdato_fra AND fdato < @fdato_til' else set @params = @params + 'fdato = @fdato_fra' endif @epost is not null begin if @params <> '' set @params = @params + ' and ' set @params = @params + 'epost = @epost' endif @tlf_priv is not null begin if @params <> '' set @params = @params + ' and ' set @params = @params + 'tlf_priv = @tlf_priv' endif @tlf_mob is not null begin if @params <> '' set @params = @params + ' and ' set @params = @params + 'tlf_mob = @tlf_mob' endif @tlf_jobb is not null begin if @params <> '' set @params = @params + ' and ' set @params = @params + 'tlf_jobb = @tlf_jobb' endif @utmeldt_bevis is not null begin if @params <> '' set @params = @params + ' and ' set @params = @params + 'utmeldt_bevis = @utmeldt_bevis' endif @utmeldt_fra is not null begin if @params <> '' set @params = @params + ' and ' if @utmeldt_til is not null set @params = @params + 'utmeldt > @utmeldt_fra and utmeldt < @utmeldt_til' else set @params = @params + 'utmeldt = @utmeldt_fra' endif @levert_emblem is not null begin if @params <> '' set @params = @params + ' and ' set @params = @params + 'levert_emblem = @levert_emblem' endif @dod_fra is not null begin if @params <> '' set @params = @params + ' and ' if @dod_til is not null set @params = @params + 'død > @dod_fra and død < @dod_til' else set @params = @params + 'død = @dod_fra' endif @dod_melding_fra is not null begin if @params <> '' set @params = @params + ' and ' if @dod_melding_til is not null set @params = @params + 'død_melding > @dod_melding_fra and død_melding < @dod_melding_til' else set @params = @params + 'død_melding = @dod_melding_fra' endif @ordensgrad_fra is not null begin if @params <> '' set @params = @params + ' and ' if @ordensgrad_til is not null set @params = @params + 'ordensgrad > @ordensgrad_fra and ordensgrad < @ordensgrad_til' else set @params = @params + 'ordensgrad = @ordensgrad_fra' endif @dod_status is not null begin if @params <> '' set @params = @params + ' and ' set @params = @params + '@død_status like ' + char(39) + '%' + char(39) + ' + @dod_status_input + ' + char(39) + '%' + CHAR(39) enddeclare @query nvarchar(max)set @query = @base_query + @paramsprint @queryexecute sp_executesql @statement = @query, @params = N'@fornavn_input nvarchar(100),@medlemsnummer,@fornavn,@fornavn_eksakt,@etternavn,@etternavn_eksakt,@adresse1,@adresse2,@postnummer,@sted,@land,@tittel,@fdato_fra,@fdato_til,@epost,@tlf_priv,@tlf_jobb,@tlf_mob,@utmeldt_bevis,@utmeldt_fra,@utmeldt_til,@levert_emblem,@dod_fra,@dod_til,@dod_melding_fra,@dod_melding_til,@dod_status,@ordensgrad_fra,@ordensgrad_til', @fornavn_input = @fornavn;END
Thanks!