/ / 'I' 'Lub' warunek za pomocą procedury przechowywanej w SQL Server - sql, sql-server, stored-procedures

"I" "lub" warunek z wykorzystaniem procedury przechowywanej w SQL Server - sql, sql-server, stored-procedures

Mam pytanie dotyczące używania procedury przechowywanej w SQL Server 2005.

To jest moja procedura przechowywana:

ALTER PROCEDURE [dbo].[tst_user_sp]
-- Add the parameters for the stored procedure here
@p1 nvarchar = null,
@p2 nvarchar = null AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
SELECT state
FROM tst_user
WHERE user_id = @p1 AND user_pwd = @p2;
END

Moim oczekiwanym wynikiem jest uzyskanie wartości "stanu". Zwrócił pustą płytę.

Ale po zmianie And do Or, Mam wyjście. Dlaczego nie mogę uzyskać danych wyjściowych za pomocą And?

Moje zapytanie sql:

exec tst_user_sp "lackh", "s"

Odpowiedzi:

3 dla odpowiedzi № 1

Nie mam pojęcia, czy jest to związane z problemem, który widzisz, ale twoja procedura przechowywana ma poważny problem. Definicja to:

ALTER PROCEDURE [dbo].[tst_user_sp]
-- Add the parameters for the stored procedure here
@p1 nvarchar = null,
@p2 nvarchar = null AS

To wykorzystuje domyślna długość dla nvarchar pola, a wartość domyślna zależy od kontekstu. Powinieneś zawsze używaj długości podczas używania typów łańcuchów w SQL. Coś jak:

ALTER PROCEDURE [dbo].[tst_user_sp] (
-- Add the parameters for the stored procedure here
@p1 nvarchar(4000) = null,
@p2 nvarchar(4000) = null
) AS

Biorąc pod uwagę to, co robisz w procedurze, wszelkie użycie wartości domyślnych spowoduje brak zwracanej wartości, ze względu na sposób where zdanie jest zdefiniowane.