>Salve a tutti,
Ciao
>ho questo problemino. Vorrei inserire un record
>in una tavola dove il campo codice è un long progressivo senza
>identità: insomma non voglio usare il contatore automatico, ma
>voglio controllarlo di persona.
>Ho pensato di scrivere la query da inserimento in questo modo:
>"INSERT INTO fatture
>(numReg,Anno,Dataregistrazione, Cliente,....)
>VALUES
>((SELECT MAX(numreg) + 1 FROM fatture),@Anno,@DataRegistrazione,@Codcli,........
>) "
>
>l'SQL mi diche che non è consentito eseguire sottoquery del genere
>in questo contesto o una cosa simile.
Se utilizzi SQL Server, puoi scrivere una stored procedure che al suo interno fa la insert del record come ti serve. Qui di seguito un esempio:
USE tempdb;
-- tabella di prova
CREATE TABLE Fatture
(
IDFattura bigint NOT NULL,
Data datetime NOT NULL,
CONSTRAINT PK_Fatture PRIMARY KEY CLUSTERED
(
IDFattura
)
)
GO
-- stored procedure per la gestione dell'inserimento
CREATE PROCEDURE InsertFatture
@Data datetime
AS
BEGIN
SET NOCOUNT ON;
-- ricavo il massimo record già inserito
DECLARE @IDFattura bigint
SELECT @IDFattura = COALESCE(MAX(IDFattura),0) + 1 FROM Fatture
-- inserisco i dati
INSERT INTO Fatture (IDFattura, Data)
VALUES (@IDFattura, @Data)
END
GO
-- eseguo la stored procedure
EXEC InsertFatture '20070525 10:30'
EXEC InsertFatture '20070527 12:30'
EXEC InsertFatture '20070530 15:30'
-- record inseriti
SELECT
IDFattura,
Data
FROM
Fatture
-- pulizia
DROP TABLE Fatture;
DROP PROCEDURE InsertFatture
A questo punto, una volta creata sul tuo database la stored procedure, da asp.net è sufficiente richiamarla e passarle i parametri.
Nell'esempio ho messo solamente la data.. ovviamente mancano tutte le tue info, prendilo come un esempio da cui prendere spunto se dovesse tornarti utile.
Ciao!
Alx81 =)
http://blogs.dotnethell.it/suxstellino