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 № 1Nie 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.