Avatar billede boomshanka Nybegynder
10. april 2007 - 13:13 Der er 4 kommentarer og
1 løsning

Kan man bruge jokertegn og variabler i en SP sammen?

Hej eksperter,

Lad os tage et eksempel med en simpel tabel:

CREATE TABLE tblName (
    id INT NOT NULL PRIMARY KEY,
    lastname NVARCHAR(100) NOT NULL
)
GO

INSERT INTO tblName (id, lastname) VALUES (1, 'Andersen')
INSERT INTO tblName (id, lastname) VALUES (2, 'Rasmussen')
INSERT INTO tblName (id, lastname) VALUES (3, 'Fisher')
INSERT INTO tblName (id, lastname) VALUES (4, 'Molstrup')
GO

Nu vil jeg gerne oprette en Stored Procedure som vælger alle navne som ender på en bestemt værdi, som jeg sender med sammen med SP'en. jeg kunne forestille mig noget lignende:

CREATE PROCEDURE SelectLastName
    @ending VARCHAR(3)
AS
    SELECT *
    FROM tblName
    WHERE lastname LIKE @ending
GO

Problemet er nu, at jeg umiddelbart ikke kan få jokertegnet (%) sat rigtigt ind så kun den sidste del af lastname undersøges. Er der nogen som har et bud på hvordan det kan løses?
Avatar billede hrc Mester
10. april 2007 - 13:34 #1
Måske kan dette her gøre det?

CREATE PROCEDURE SelectLastName @search VARCHAR(3), @joker bit = 1
AS
  if (@joker = 1)
    SELECT *
      FROM tblName
      WHERE lastname LIKE @search%
  else
    SELECT *
      FROM tblName
      WHERE lastname = @search
Go
Avatar billede hrc Mester
10. april 2007 - 13:37 #2
CREATE PROCEDURE [dbo].[SelectLastName]
  @search VARCHAR(3), @joker bit = 1
AS
  if @joker = 1
    SELECT * FROM tblName WHERE lastname LIKE @search + "%"
  else
    SELECT * FROM tblName WHERE lastname = @search
Avatar billede boomshanka Nybegynder
10. april 2007 - 13:38 #3
Nope, jeg får en "Incorrect syntax near '%'." hvis jeg bruger jokertegn
Avatar billede boomshanka Nybegynder
10. april 2007 - 13:40 #4
Ah...skulle lige se din anden besked først. Det var blot et spørgsmål om at tilføje et "+". Bortset fra det så skulle det ende på variabelnavnet, så det skulle nok se sådan ud:

CREATE PROCEDURE [dbo].[SelectLastName]
  @search VARCHAR(3), @joker bit = 1
AS
  if @joker = 1
    SELECT * FROM tblName WHERE lastname LIKE "%" + @search
  else
    SELECT * FROM tblName WHERE lastname = @search

Det virker fint hos mig - kast et svar tilbage så får du dine point, hrc :-)
Avatar billede hrc Mester
10. april 2007 - 14:02 #5
Hermed et svar. Tænkte nok min kreation skulle testes lidt før den virkede.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester