>Dove toppo questa volta?
Nei data type
nchar(20) rappresenta una stringa UNICODE a lunghezza fissa di 20 caratteri, quindi la stringa 'Lorenzo' in realtà verrà memorizzata come 'Lorenzo' + 13 spazi.
Nel tuo esempio ci sono ulteriori 2 errori:
1) Sia il parametro @Cognome che la variabile di appoggio @Var sono definite come nchar(20) e tra l'altro vai a concatenare una stringa nulla al cognome... bah, comunque ti perderai l'ultimo carattere '%':
DECLARE @Cognome nchar(20), @Var nchar(20);
SET @Cognome = N'Benaglia';
SET @Var=N'' + @Cognome + '%'
SELECT @Cognome AS Cognome, @Var AS [Var];
/* Output:
Cognome Var
-------------------- --------------------
Benaglia Benaglia
(1 row(s) affected)
*/
2) A che serve il parametro di input @Nome se non viene utilizzato dal comando di SELECT?
Ora,
1) Per quale motivo utilizzi UNICODE? Devi inserire cognomi in Kanji o Cirillico?
2) Modifica il data type nchar sia nella tabella che nella procedura in varchar e riscrivi il tutto come:
USE tempdb;
CREATE TABLE dbo.Anagrafica(
Nome varchar(20) NOT NULL,
Cognome varchar(20) NOT NULL
);
INSERT dbo.Anagrafica VALUES
('Lorenzo', 'Benaglia')
, ('Andrea', 'Montanari')
, ('Luca', 'Bianchi');
GO
CREATE PROCEDURE dbo.up_RicercaAnagrafica
@Cognome varchar(20)
AS
SET NOCOUNT ON;
SELECT *
FROM dbo.Anagrafica
WHERE Cognome LIKE @Cognome + '%';
GO
EXEC dbo.up_RicercaAnagrafica 'Benaglia';
/* Output:
Nome Cognome
-------------------- --------------------
Lorenzo Benaglia
*/
EXEC dbo.up_RicercaAnagrafica 'Mont';
/* Output:
Nome Cognome
-------------------- --------------------
Andrea Montanari
*/
EXEC dbo.up_RicercaAnagrafica 'B';
/* Output:
Nome Cognome
-------------------- --------------------
Lorenzo Benaglia
Luca Bianchi
*/
DROP PROCEDURE dbo.up_RicercaAnagrafica;
DROP TABLE dbo.Anagrafica;
>Un grazie a tutti
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org