webForumDet fria alternativet

MSSQL & dynamiska SP:s

5 svar · 352 visningar · startad av ironhead

ironheadMedlem sedan mars 20011 346 inlägg
#1

Hej!

Jag har blivit varnad på detta forum tidigare för att använda strängar i Lagrade Procedurer.

Problemet är att det är himla enkelt om jag vill skicka in ett eller flera värden in i SP:n.

Hur ska man göra istället?

ex. denna parameter sFM tar ett eller flera val med (or/and), hur ska man lösa det utan att bygga strängar i SP:n?

	if @sFM <> '' 
		begin
		set @CommaWk = 0
		set @SQLString = @SQLString + N'and  ('
		select @iCommaAt = CHARINDEX(',', @sFM)
		while @iCommaAt > 0
			begin
			if @CommaWk > 0 set @SQLString = @SQLString + N'or '
			if substring(@sFM, 1, @iCommaAt - 1) > '' 
				begin
				set @CommaWk = @CommaWk + 1
				set @SQLString = @SQLString + 'sTest.sFM = ' + substring(@sFM, 1, @iCommaAt - 1)
				end
			select @sFM = substring(@sFM, @iCommaAt + 1, 255)
			select @iCommaAt = charindex(',', @sFM)
			end
LarsGMedlem sedan dec. 200012 464 inlägg
#2

Om du har and/or så går det inte på något annat sätt. Om du ändå skall bygga strängar kan du lika gärna göra det i något språk som har bättre stöd för stränghantering än vad T-SQL har.

ironheadMedlem sedan mars 20011 346 inlägg
#3

LarsG skrev:

Om du har and/or så går det inte på något annat sätt. Om du ändå skall bygga strängar kan du lika gärna göra det i något språk som har bättre stöd för stränghantering än vad T-SQL har.

Ponera att jag byggt ihop min sträng i t.ex. ASP....hur använder jag den i min SP sen då?

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Om du vill skicka den som en parameter till en procedure så får du använda exec eller sp_execute. Men du har ingen fördel av att anropa en procedur, du kan lika gärna exekvera det direkt från din klient.

ironheadMedlem sedan mars 20011 346 inlägg
#5

aha! ok! Tack för svaren.

ironheadMedlem sedan mars 20011 346 inlägg
#6

Skulle det vara någon skillnad om jag bara använde ett av uttrycken...t.ex. "AND" ?

132 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)