2017-06-29 1 views
0

Ich habe ein Problem zu verstehen Skalarvariablen in SQL als die Logik nicht zu vergleichen scheint, was ich bin es gewohnt, in C.Sql Skalarvariablen

auf dieser gespeicherten Prozedur Arbeiten:

CREATE procedure [dbo].[sp_GetUserNameByLast4SSNandDOB] 
    @SSN varchar(4) 
    @DOB date 
AS 
    SELECT 
     User_FirstName + ' ' + User_LastName AS EmployeeName 
    FROM 
     tblUsers m 
    WHERE 
     RIGHT(m.User_SSN, 4) = @SSN 
     AND m.User_DOB = @DOB 

Versuche, die Variablen einfach weiterzugeben und die eine Zeile zurückzugeben, die zurückgegeben wird. Aber es scheint immer zu sein, dass die Variable skalar ist. Jede Hilfe mit dem Verständnis, wie man Skalare vermeidet, wird sehr geschätzt. Vielen Dank!

+2

Kennzeichnen Sie Ihre Fragen mit der von Ihnen verwendeten Datenbank. –

+0

möchten Sie vielleicht über die Art der Sprachen nachdenken, in denen SQL und C zwei verschiedene Systeme sind. Dabei ist C eine Programmiersprache, die meist Ihre Anwendung spielt, während SQL eine Datenbanksprache ist und die Datenbank selbst eine eigene Struktur hat ... i sehe nicht, dass SQL in der Lage ist, nicht-skalare Variablen zu verarbeiten, da hier alles definiert werden muss, ich nehme an, hier zählt jedes Bit – maSTAShuFu

+0

Randnotiz für ** SQL Server **: Sie sollten ** nicht ** das 'sp_' verwenden Präfix für Ihre gespeicherten Prozeduren. Microsoft hat [dieses Präfix für seine eigene Verwendung reserviert (siehe * Gespeicherte Prozeduren benennen *)] (http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx), und Sie riskieren irgendwann in der Zukunft einen Namenskonflikt. [Es ist auch schlecht für die Leistung Ihrer gespeicherten Prozedur] (http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix). Es ist am besten, einfach 'sp_' zu vermeiden und etwas anderes als Präfix zu verwenden - oder gar kein Präfix! –

Antwort

0

Nicht sicher, ob ich Ihr Problem richtig verstehe, ist das Verfahren nicht Erstellen?

kann ich einen Fehler sehen:

CREATE procedure [dbo].[sp_GetUserNameByLast4SSNandDOB] 
@SSN varchar(4), 
@DOB date 
as 
Select User_FirstName+' '+User_LastName as EmployeeName from tblUsers m 
where RIGHT(m.User_SSN,4)= @SSN and m.User_DOB= @DOB 

Nur die Kenntnis, zwischen den Variablen.

+0

wir alle kennen den Fehler ... die Hauptfrage ist über skalare Variablen – maSTAShuFu

+0

Wow. Mein Fehler war so klein wie ein Komma. Ich habe mir das angeschaut und versucht herauszufinden, warum die Logik vernünftig schien, aber es funktionierte nicht. Aber ja. Zu lernen, wie Skalare funktionieren, ist etwas, was ich versucht habe, meinen Kopf einzuwickeln. –

+0

Leider bin ich auch noch im Dunkeln bezüglich Skalarvariablen, nur dachte ich wies auf das Problem hin, das mir aufgefallen ist. – GoodDisplayName