sql >> Database >  >> RDS >> Sqlserver

opgeslagen procedure met wildcard-parameters

Heb je het nog een keer geprobeerd? Ik vermoed dat de exec-oproep nu deel uitmaakt van de hoofdtekst van uw procedure. Wat dacht je van:

ALTER PROCEDURE dbo.wildcard_name
  @userName NVARCHAR(8) = '%'
AS
BEGIN
  SET NOCOUNT ON;

  SELECT userId, userName
    FROM dbo.user
    WHERE userName LIKE @userName;
END
GO -- <-- this is important! It tells SSMS that your procedure has ended!

EXEC dbo.wildcard_name N'n%';

Een heleboel andere suggesties die ik niet zou noemen:

  • Je moet altijd het schemavoorvoegsel opgeven bij het maken en aanroepen van objecten. Dus CREATE PROCEDURE dbo.wildcard_name , EXEC dbo.wildcard_name , enz.
  • Hopelijk gebruikt uw productiecode geen SELECT * .
  • Beveel ten zeerste aan om nvarchar te gebruiken in plaats van nchar voor je parameter.
  • Wikkel uw proceduretekst in met BEGIN / END en wees niet bang om inspringen te gebruiken om het veel leesbaarder te maken.
  • Meestal wil je SET NOCOUNT ON; . gebruiken om te voorkomen dat n row(s) affected berichten uw resultaten niet kunnen verstoren.
  • NVARCHAR parameters moeten een N-voorvoegsel hebben (hoewel ik in de war ben waarom je afwisselt tussen varchar en nchar in de eerste plaats - dit zijn twee ploegen waar ik nul zou verwachten).
  • Afhankelijk van de sortering (en of u wilt dat de zoekopdracht hoofdlettergevoelig is), moet u mogelijk uw where-clausule wijzigen met de COLLATE clausule.

BEWERKEN dit lijkt prima te werken voor mij, dus leg alsjeblieft uit wat je anders doet (en betekent "werkte niet" nog steeds een leeg resultaat, of iets anders?):




  1. ORA-04091:tabel xx_xx muteert, trigger/functie ziet het mogelijk niet

  2. 5 manieren om te controleren of een tabel bestaat in MySQL

  3. MySQL UNIQUE-sleutel werkt niet

  4. Oracle Forms and Reports 11g versie 2 installeren