>La mia tabella purtroppo x ora ha una sola chiave primaria che
>è l'ID auto-incrementale,
OK
>per la modifica che hai suggerito tu
>provo a modificarla aggiungendo le altre due colonne, una per
>la descrizione del campo e una per la data,
Gulp? E a che servirebbero queste altre 2 colonne?
Scusa, a parte l'ID non hai una o più colonne che identificano univocamente una riga? In questo caso è sufficiente definire un constraint UNIQUE e sei a posto.
"UNIQUE Constraints"
http://msdn2.microsoft.com/en-us/library/ms191166.aspx
>La seconda cosa che volevo chiederti è dove posso trovare un
>esempio di come creare una stored procedure che faccia al mio
>caso perché sto già migrando il progetto in VS2005 e li credo
>di utilizzare solo SQL.
A questo punto se deciderai di utilizzare esclusivamente SQL Server potresti servirti della funione EXISTS():
USE tempdb;
GO
/* Creo la tabella dbo.Students */
CREATE TABLE dbo.Students(
StudentID int NOT NULL IDENTITY,
FirstName varchar(10) NOT NULL,
LastName varchar(10) NOT NULL,
Country varchar(10) NOT NULL,
CONSTRAINT PK_Students PRIMARY KEY(StudentID),
CONSTRAINT UN_name UNIQUE(FirstName, LastName)
);
GO
/* Creo la stored procedure dbo.up_ManageStudents */
CREATE PROCEDURE dbo.up_ManageStudents(
@FirstName varchar(10),
@LastName varchar(10),
@Country varchar(10)
)
AS
IF EXISTS(
SELECT *
FROM dbo.Students
WHERE FirstName = @FirstName
AND LastName = @LastName
)
/* Eseguo l'UPDATE */
UPDATE dbo.Students
SET FirstName = @FirstName,
LastName = @LastName,
Country = @Country
WHERE FirstName = @FirstName
AND LastName = @LastName
ELSE
/* Eseguo l'INSERT */
INSERT dbo.Students VALUES(@FirstName, @LastName, @Country);
GO
/* Aggiungo 3 studenti */
EXEC dbo.up_ManageStudents 'Lorenzo', 'Benaglia', 'Italy';
EXEC dbo.up_ManageStudents 'Luca', 'Bianchi', 'Italy';
EXEC dbo.up_ManageStudents 'Gianluca', 'Hotz', 'Swiss';
GO
/* Vediamo... */
SELECT *
FROM dbo.Students;
GO
/* Output:
StudentID FirstName LastName Country
----------- ---------- ---------- ----------
1 Lorenzo Benaglia Italy
2 Luca Bianchi Italy
3 Gianluca Hotz Swiss
(3 row(s) affected)
*/
/* Aggiorno il mio account */
EXEC dbo.up_ManageStudents 'Lorenzo', 'Benaglia', 'USA';
GO
/* Vediamo... */
SELECT *
FROM dbo.Students;
GO
/* Output:
StudentID FirstName LastName Country
----------- ---------- ---------- ----------
1 Lorenzo Benaglia USA
2 Luca Bianchi Italy
3 Gianluca Hotz Swiss
(3 row(s) affected)
*/
/* Pulizia */
DROP PROCEDURE dbo.up_ManageStudents;
DROP TABLE dbo.Students;
>Grazie ancora e a presto
Prego.
>P.S. complimenti all'amministratore / amministratori per il sito,
>lo sto "spulciando" ben bene ed è molto bello!
Merito di David :-)
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org