2016-07-12 11 views
0

Ich habe Probleme mit meinem Code:Msg 512 ... SQL Server Code

drop type Pesel 
go 

drop assembly pesel 
go 

create assembly pesel 
authorization dbo from 'C:\Users\Logan\Desktop\Projekt\Projekt.dll' with permission_set = safe 
go 

create type dbo.Pesel 
external name Pesel.Pesel 
go 

declare @a Pesel 

select * from dbo.dane 

set @a = (select numer_pesel as pesel from dbo.dane) 
select @a.ValidatePesel() 
select @a.BirthDate() 
select @a.GetGender() 

ich einen Fehler bekam:

Msg 512, Level 16, State 1, Line 15
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Als ich es zum Beispiel so versuchen:

set @a = cast('93071611479' as pesel) 

alles ist OK, aber es ist immer noch nur 1 Antwort: P

EDIT:

Ich habe es geschafft, mein Problem zumindest teilweise zu lösen, aber jetzt will ich meine Ergebnisse in die Tabelle platzieren

drop type Pesel 
go 
drop assembly pesel 
go 
create assembly pesel 
authorization dbo 
from 'C:\Users\Logan\Desktop\Projekt\Projekt.dll' 
with permission_set = safe 
go 
create type dbo.Pesel 
external name Pesel.Pesel 
go 
declare @a Pesel 
select * from dbo.dane 
declare @b int 
set @b = 0 
while @b < (select max(P_Id) from dane) 
begin 
set @a = (select numer_pesel as pesel from dane where P_Id = [email protected]) 
set @b += 1 
if (select numer_pesel from dane) = null 
break 
select @a.ValidatePesel() 
select @a.BirthDate() 
select @a.GetGender() 
end 

Ich habe versucht Tabelle zu erstellen und die oben wählt in Spalten setzen aber irgendwie funktioniert es nicht. Irgendwelche Hinweise Jungs :)?

+8

(1) Ich entfernte den MySQL-Tag zurück, weil der Code offensichtlich T-SQL ist. (2) Die Fehlermeldung ist ziemlich offensichtlich: 'dane' hat mehr als eine Zeile. Gibt es etwas, das du nicht verstehst? –

Antwort

0

auf Gordon Kommentar Ausarbeiten:

set @a = (select numer_pesel as pesel from dbo.dane) 

In der Erklärung oben, select numer_pesel as pesel from dbo.dane zurückkehren mehr als einen Wert. Das wäre wie wenn man sagt:

set @a = 123 456 654

Stattdessen können Sie die TOP 1 wählen Sie einfach den Code zu bekommen zu laufen und dann herauszufinden, was Sie in Ihrem SELECT Aussage zu tun, benötigen Sie den aktuellen Wert, den Sie erhalten möchten .

set @a = (select top 1 numer_pesel as pesel from dbo.dane)

Sie werden Ihre Unter wählen, (select numer_pesel as pesel from dbo.dane) mit irgendeiner Art von Bedingung oder Filter haben zu begrenzen.

+0

Dann wieder ein 'TOP 1' * ohne * eine explizite' ORDER BY' gibt nur eine beliebige Zeile zurück, in keiner bestimmten Reihenfolge - normalerweise nicht genau das, was Sie wollen ..... –

+0

@marc_s ich stimme zu, deshalb sagte, es würde nur den Code zum Laufen bringen und dann kann er herausfinden, wie man ihn begrenzt, um den richtigen Wert zu erhalten. Definitiv nicht der Wert, den das OP aus der Box will. – scsimon

0

Der Fehler tritt in der folgenden Zeile:

set @a = (select numer_pesel as pesel from dbo.dane) 

Führen Sie die unten Abfrage und sehen, ob es mehr als eine Zeile zurückgibt.

select numer_pesel as pesel from dbo.dane 

Wenn ja, fügen Sie eine Bedingung mit dem Statement der Abfrage macht einzigartig numer_pesel