Hejsan,
Jag vill göra något om select:en returnerar något, och något annat om den inte gör det.
CREATE PROCEDURE dbo.coke_HasExistingAddress
(
@CurName varchar(128),
@CurAddress varchar(128),
@HasContent bit OUTPUT
)
AS
DECLARE @sqlStmt nvarchar(1500)
SET @sqlStmt = "SELECT Name, Address FROM t1
INNER JOIN t2 ON t1.id = t2.id
WHERE Name LIKE '" + @CurName + "'
AND Address LIKE '" + @CurAddress + "'"
EXEC sp_executesql @sqlStmt
IF @sqlStmt IS NULL
SET @HasContent = 0
ELSE
SET @HasContent = 1
RETURN @HasContent
GO
Nu blir naturligtvis HasContent alltid 1 eftersom själva strängen aldrig är tom, men det jag vill är ju egentligen att kolla det som sqlStmt returnerar.. vad är det för syntax för det?
(Syftet egentligen med det hela är att kolla om Name/Address existerar i databasen som en unik kombination... Ungefär att när man matar in en ny post så ska koden kolla om Name redan har en adress kopplat till sig; om ja så ska man använda denna adress, annars så ska man göra skapa en ny adress i t2 och koppla den till Name i t1... (ungefär så iaf).. så ovanstående gör halva jobbet typ.. :) finns garanterat kortare sätt att göra det hela på, som om kommentarer på det finns lyssnar jag på det också : )
LarsGMedlem sedan dec. 200012 464 inlägg Det finns ingen anledning att använda dynamisk SQL. Varför return?
CREATE PROCEDURE dbo.coke_HasExistingAddress
(
@CurName varchar(128),
@CurAddress varchar(128),
@HasContent bit OUTPUT
)
AS
if exists(select * from t1
inner join t2 on t1.id = t2.id
where name like @CurName
and address like @CurAddress)
set @HasContent = 0
else
set @HasContent = 1
GO
Om du vill undvika duplikat så måste du skapa ett unique constraint. Då behövs ingen select öht så egentligen är hela proceduren onödig.
Hej LarsG.. :) aha.. if exists(...) okay.. jättebra.. tack för snabba svaret !!
hmm.. a just det.. att jag inte tänkte på det.. unique constraint.. så hur jobbar man bäst med det.. om koden klagar på att den gör nån violate mot constraint så fångar jag felet och anropar lämplig SP osv...?
Jag skippar proceduren som du sa iaf.. tack igen :)
har läst lite granna, men jag måste fråga igen är jag rädd.. alltså.. att sätta en unique constraint på en kolumn går ju.. men jag vill t.ex. att en adress får förekomma flera gånger, och likså en ett namn, men det jag vill kolla är väl att ett namn inte redan finns för en specifik adress, dvs just den namn/adress kombinationen..?
Hur kan jag sätta unique constraint denna kombination, eller tänkte jag fel igen..? :)
LarsGMedlem sedan dec. 200012 464 inlägg alter table nisse add constraint kurt unique(name,address)
betyder att kombination namn och adress måste vara unik.
(kom av mig under helgen tyvärr..) tack igen för svaret.. ! Jag hittar dock inte hur man gör om det är olika tabeller det handlar om..?
kod:
alter table nisse add constraint kurt unique(name,address)
men då förutsätter det väl att name och address tillhör samma tabell..? men om name är i t1, och address i t2, hur blir det då..? Skulle vara smidigt om det gick att lösa med en kort SQL :) eller ska jag köra med den ursprungliga SP:n (med if exists etc) ?
LarsGMedlem sedan dec. 200012 464 inlägg Om namn och adress ligger i olika tabeller så måste det finnas något sätt att koppla ihop namnet med rätt adress eller hur? T.ex. att du har ett id-nummer i adresstabellen som är en foreign key till namntabellen och i så fall är det kombinationen av detta id-nummer och adressen som skall ingå i unique.
aha.. så jag lägger till pk/fk kopplingen o lägger till
alter table nisse add constraint kurt unique(t1.id,address)
ungefär..? okay.. ska testa, återkommer om det inte fungerar.. tack så mycket :)