| 

.NET C# Java Javascript Exception

1
Hallo,

ich habe häufig ein Problem mit Abfragen folgender Art.
Ich benutze diese um sicherzustellen dass die Spalte vorhanden ist. Im Beispiel wird die Spalte später noch umbenannt. Bei der zweiten Ausführung sollte das Update nicht mehr ausgeführt werden, aber der SQL-Server quittiert mir das Ganze trotzdem mit einer Fehlermeldung. Wenn ich das Select aus der Exists-Clause einzeln ausführe, zeigt er mir das richtige (leere) Ergebnis an...

Abfrage:
IF EXISTS (
SELECT 1
FROM sys.columns
WHERE NAME = N'permissiontype_id'
AND Object_ID = Object_ID(N'[dbo].[gptbl_user_permission]')
)
BEGIN
UPDATE gptbl_user_permission
SET permissiontype_id = 1
WHERE objecttype_id = 'resultinfo'
END
GO


Änderung:
IF EXISTS (
SELECT *
FROM sys.columns
WHERE NAME = N'permissiontype_id'
AND Object_ID = Object_ID(N'[dbo].[gptbl_user_permission]')
)
BEGIN
ALTER TABLE [dbo].[gptbl_user_permission]

DROP CONSTRAINT PK_gptbl_user_permission

EXEC sp_rename '[dbo].[gptbl_user_permission].[permissiontype_id]'
, 'permissiontype'
, 'COLUMN';

ALTER TABLE [dbo].[gptbl_user_permission] ADD CONSTRAINT PK_gptbl_user_permission PRIMARY KEY CLUSTERED (
[objecttype_id] ASC
, [permissiontype] ASC
, [user_id] ASC
)
WITH (
PAD_INDEX = OFF
, STATISTICS_NORECOMPUTE = OFF
, IGNORE_DUP_KEY = OFF
, ALLOW_ROW_LOCKS = ON
, ALLOW_PAGE_LOCKS = ON
)
END
GO
News:
03.06.2015
Barados 288 1 7
1 Antwort
0
Ich sehe auf den ersten Blick keinen Fehler...
Könnte es sein, dass das Script unter einem Benutzer ausgeführt wird, der keine Rechte auf die Tabelle hat und des halb die Existenz der Spalte nicht "mitbekommt"?
Wir verwenden übrigens statt sys.columns noch:
IF NOT EXISTS(SELECT * FROM syscolumns
WHERE id = OBJECT_ID('<Table>') AND name = '<Column>')
BEGIN
ALTER TABLE <Table> ADD <Column> <Typ> NULL
END
GO

Es gab damit noch nie Probleme bei derartigen EXISTS-Abfragen.
Vielleicht hilft der Hinweis weiter.
12.06.2015
edvservice 1,2k 6

Stelle deine Sql-Frage jetzt!