Är det någon som har ett tips om hur jag ska kunna använda resultatet jag får från en lagrad procedur? Jag skriver ett script som jag vill kunna köra flera gånger som ska lägga upp en ny användare i MS SQL Server. För att veta om jag ska lägga till användaren eller inte måste jag veta om den redan finns. Vad är det för programmeringsspråk du kodar i? Skapa en temporärtabell och fyll den med resultatet från en sp. Är det något i denna stil du är ute efter? DU skickar in för och efternamn. Finns detta redan i tabellen så gör vi nåt annat, annars adderar vi Japp, med lite modifiering gick det bra. Du kan också testa det här - så får du lite enklare och effektivare kod:Jobba med sökresultatet från en lagrad procedur
Det finns ju en lagrad procedur sp_helpuser 'användarnamn' som ger ett resultat tillbaka. Jag tänker mig något i stil med:
IF EXISTS (select * from <det sökresultat jag får från sp_helpuser>)
Print 'Användaren finns!'
ELSE
-- Lägg till användaren
Till saken hör att jag måste förhindra alla felmeddelanden från SQL Server, för mitt scriptprogram avbryter om ett felmeddelande returneras och då körs inte resterande rader i scriptet och uppdateringen blir ofullständig.
Tacksam för tips!Sv: Jobba med sökresultatet från en lagrad procedur
Sv: Jobba med sökresultatet från en lagrad procedur
Exempel:
<CODE>
CREATE TABLE #users
(
UserName VARCHAR (50),
GroupName VARCHAR (50),
LoginName VARCHAR (50),
DefDBName VARCHAR(50),
UserID INT,
SID INT
)
INSERT INTO #users
EXEC sp_helpuser
--Gör något med resultatet
DROP TABLE #users
</CODE>
Du får kolla upp fältlängderna själv. Jag känner inte till hur långa strängar som tillåts.
/PelleSv: Jobba med sökresultatet från en lagrad procedur
<code>
create procedure createnewuser
@firstname varchar(50)
, @lastname varchar(50)
, @password varchar(50)
as
if not exists(select * from usertabell where firstname = @firstname and lastname=@lastname)
begin
insert into usertabell (firstname, lastname, password) values(@firstname, @lastname, @password)
end
else
begin
update usertabell
set password = @password
where firstname = @firstname
and lastname = @lastname
end
</code>Sv: Jobba med sökresultatet från en lagrad procedur
Fältlängderna ska vara nvarchar(128) eller aliaset sysname och sifferfälten är smallint. Jag var även tvungen att speca att några fält kunde innehålla NULL. Så här blev det:
CREATE TABLE #users
(
UserName sysname,
GroupName sysname,
LoginName sysname null,
DefDBName sysname null,
UserID smallint,
SID smallint
)
Då kunde jag göra som du sa:
INSERT INTO #users EXEC sp_helpuser
och sedan göra:
IF EXISTS (SELECT * FROM #users WHERE UserName = 'EttAnvNamn') BEGIN
-- gör det ena
END
ELSE BEGIN
-- gör det andra
END
DROP TABLE #users
Tack för hjälpen!
Patrik: Programmeringsspråket är T-SQL.Sv: Jobba med sökresultatet från en lagrad procedur
<CODE>
DECLARE @OK BIT
EXEC @OK = sp_helpuser 'EttAnvNamn'
if @OK = 0
-- gör det ena
ELSE
-- gör det andra
</CODE>
Det är inte säkert att denna metod fungerar lika bra eftersom sp_helpuser verkar ge ett fel om inte användaren finns, men du kan ju testa.
/Pelle