1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
|
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'dbo.TestErreur') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
DROP PROCEDURE dbo.TestErreur
GO
IF EXISTS
(
SELECT *
FROM dbo.sysobjects
WHERE id = OBJECT_ID(N'dbo.TableTestSource')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1
)
DROP TABLE dbo.TableTestSource
GO
CREATE TABLE dbo.TableTestSource
(
ID UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL CONSTRAINT DF_TableTestSource_ID DEFAULT (NEWID()),
Nom NVARCHAR(50) NULL,
NumLigne INT NULL,
CONSTRAINT PK_ID PRIMARY KEY (ID ) WITH FILLFACTOR = 90
)
GO
INSERT INTO dbo.TableTestSource (Nom, NumLigne) VALUES ('Ligne1','1')
INSERT INTO dbo.TableTestSource (Nom, NumLigne) VALUES ('Ligne2','2')
INSERT INTO dbo.TableTestSource (Nom, NumLigne) VALUES ('Ligne3','3')
GO
-- CREATE PROCEDURE dbo.TestErreur
--AS
--BEGIN
SELECT *
INTO #TestLocal
FROM TableTestSource
WHERE 1=0
GO
--On ajoute une colonne de numerotation automatique
ALTER TABLE #TestLocal
ADD NumLigneInc BIGINT IDENTITY (0,1)
GO
-- Histoire qu'il y ait quelques lignes
INSERT INTO #TestLocal
(
ID,
Nom,
NumLigne
)
SELECT TOP 10 ID, Nom, NumLigne
FROM TableTestSource AS T
GO
-- Cette ligne provoque pas l'erreur 'NumLigneInc" colonne inconnue
UPDATE #TestLocal
SET NumLigne = NumLigneInc + 1
GO
-- Cette ligne ne provoque pas l'erreur 'NumLigneInc" colonne inconnue
SELECT ID,
Nom,
NumLigne,
NumLigneInc
FROM #TestLocal
GO
-- Cette ligne ne provoque jamais d'erreur et 'NumLigneInc' est apparente
SELECT *
FROM #TestLocal
GO
DROP TABLE #TestLocal
GO
-- END
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'dbo.TestErreur') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
DROP PROCEDURE dbo.TestErreur
IF EXISTS
(
SELECT *
FROM dbo.sysobjects
WHERE id = OBJECT_ID(N'dbo.TableTestSource')
AND OBJECTPROPERTY(id, N'IsUserTable') = 1
)
DROP TABLE dbo.TableTestSource
GO |
Partager