Als ik een tijdelijke tabel (##-versie) aanmaak met dezelfde naam in twee stp's, maar met een andere tabel-definitie en ik drop de tabel indien deze bestaat voordat ik de tabel opnieuw maak, dan krijg ik een foutmelding dat een kolom van de nieuwe definitie niet bestaat. Zie output aan einde.
Als ik alleen aan stp1 de regel
toevoeg aan het einde, dan krijg ik geen foutmelding. Kan iemand mij dit uitleggen? Ik snap er niets van, namelijk
.
Als ik deze regel aan beide stp's toevoeg, dan krijg ik ook geen foutmelding...
stp1:
stp2:
Test-situatie:
Output:
Als ik alleen aan stp1 de regel
SQL:
1
| DROP TABLE ##x |
toevoeg aan het einde, dan krijg ik geen foutmelding. Kan iemand mij dit uitleggen? Ik snap er niets van, namelijk
Als ik deze regel aan beide stp's toevoeg, dan krijg ik ook geen foutmelding...
stp1:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| CREATE PROC [dbo].[stp_33_test_x] AS BEGIN SET NOCOUNT ON BEGIN TRY DROP TABLE ##x END TRY BEGIN CATCH IF NULL=NULL PRINT NULL--PRINT 'Iets ging fout bij y' END CATCH IF OBJECT_ID('tempdb..##x') IS NOT NULL DROP TABLE ##x ELSE IF NULL=NULL PRINT NULL--PRINT 'Iets ging fout bij y' CREATE TABLE ##x (x INT NOT NULL) INSERT INTO ##x (x) VALUES (0) END |
stp2:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| CREATE PROC [dbo].[stp_33_test_y] AS BEGIN SET NOCOUNT ON BEGIN TRY DROP TABLE ##x END TRY BEGIN CATCH IF NULL=NULL PRINT NULL--PRINT 'Iets ging fout bij y' END CATCH IF OBJECT_ID('tempdb..##x') IS NOT NULL DROP TABLE ##x ELSE IF NULL=NULL PRINT NULL--PRINT 'Iets ging fout bij y' CREATE TABLE ##x (y INT NOT NULL) INSERT INTO ##x (y) VALUES (0) END |
Test-situatie:
SQL:
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
| DECLARE @cnt BIGINT = 0 DECLARE @max BIGINT = 1000 BEGIN TRY WHILE (@cnt < @max) BEGIN EXEC stp_33_test_x EXEC stp_33_test_y SET @cnt = @cnt + 1 END END TRY BEGIN CATCH DECLARE @errornumber VARCHAR(MAX) DECLARE @error_severity VARCHAR(MAX) DECLARE @error_state VARCHAR(MAX) DECLARE @error_procedure VARCHAR(MAX) DECLARE @error_line VARCHAR(MAX) DECLARE @error_message VARCHAR(MAX) SET @errornumber=LTRIM(STR(ISNULL(ERROR_NUMBER(), 0))) SET @error_severity=LTRIM(STR(ISNULL(ERROR_SEVERITY(), 0))) SET @error_state=LTRIM(STR(ISNULL(ERROR_STATE(), 0))) SET @error_procedure=ISNULL(ERROR_PROCEDURE(), '') SET @error_line=LTRIM(STR(ISNULL(ERROR_LINE(), 0))) SET @error_message=ISNULL(ERROR_MESSAGE(), '') -- Melding op scherm zetten PRINT '**FOUT**' PRINT 'Error number : ' + @errornumber PRINT 'Error severity : ' + @error_severity PRINT 'Error state : ' + @error_state PRINT 'Error procedure : ' + @error_procedure PRINT 'Error line : ' + @error_line PRINT 'Error message : ' + @error_message END CATCH |
Output:
code:
1
2
3
4
5
6
7
| **FOUT** Error number : 207 Error severity : 16 Error state : 1 Error procedure : stp_33_test_y Error line : 19 Error message : Invalid column name 'y'. |
Used to be Down Under... Foto gallery