Hallo Zusammen,
da ich mittlerweile etwas verzweifelt bin brauch ich jetzt eure Hilfe.
Und zwar habe ich mir eine SP geschrieben die sämtliche Primary und Foreign Keys löscht.
Das klappt bisher auch ganz gut - allerdings nur wenn ich den Inhalt meiner SP manuell auf eine Datenbank laufen lasse. Da es später aber Automatisiert läut macht das so wenig Sinn.
Vielleicht übersehe ich etwas und Ihr bringt mir die Erleuchtung =)
Hier meine SP:
DECLARE @Database VARCHAR(255)
DECLARE @cmd varchar(1000)
DECLARE @pktablename nvarchar(255)
DECLARE DatabaseCursor CURSOR FOR select name from sys.databases
WHERE name NOT IN ('master','model','msdb','tempdb','distribution','ReportServerTempDB')
--WHERE name IN ('Account_DE')
ORDER BY 1
OPEN DatabaseCursor
FETCH NEXT FROM DatabaseCursor INTO @Database
WHILE @@FETCH_STATUS = 0
BEGIN
--exec sp_dboption @Database, 'db_chaining', 'true'
--exec sp_configure 'Cross DB Ownership Chaining', '1';
-- RECONFIGURE
EXEC ('use '+@Database);
DECLARE TableCursor CURSOR FOR select name from sys.tables ORDER BY 1
DECLARE @tables varchar(max)
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @Tables
WHILE @@FETCH_STATUS = 0
BEGIN
declare @SQL nvarchar(max), @pkname nvarchar(255)
print ''
print @Database + ' -> ' + @tables
DECLARE PKZeug CURSOR FOR (SELECT DISTINCT tc.CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu ON tc.CONSTRAINT_NAME = ccu.Constraint_name
WHERE (tc.CONSTRAINT_TYPE = 'Primary Key' OR tc.CONSTRAINT_TYPE = 'Foreign Key') AND tc.TABLE_NAME = Convert(nvarchar(100),@tables))
Open PKZeug
FETCH NEXT FROM PKZeug INTO @pkname
WHILE @@FETCH_STATUS = 0
BEGIN
print ' ALTER TABLE ' + Convert(nvarchar(100),@tables) + ' DROP CONSTRAINT '+Convert(nvarchar(100),@pkname) +';'
select @SQL = 'ALTER TABLE ' + Convert(nvarchar(250),@tables) + ' DROP CONSTRAINT '+Convert(nvarchar(250),@pkname) +';'
EXEC sp_executesql @sql
--print @pkname
FETCH NEXT FROM PKZeug INTO @pkname
end
CLOSE PKZeug
DEALLOCATE PKZeug
FETCH NEXT FROM TableCursor INTO @Tables
end
CLOSE TableCursor
DEALLOCATE TableCursor
FETCH NEXT FROM DatabaseCursor INTO @Database
end
CLOSE DatabaseCursor
DEALLOCATE DatabaseCursor
da ich mittlerweile etwas verzweifelt bin brauch ich jetzt eure Hilfe.
Und zwar habe ich mir eine SP geschrieben die sämtliche Primary und Foreign Keys löscht.
Das klappt bisher auch ganz gut - allerdings nur wenn ich den Inhalt meiner SP manuell auf eine Datenbank laufen lasse. Da es später aber Automatisiert läut macht das so wenig Sinn.
Vielleicht übersehe ich etwas und Ihr bringt mir die Erleuchtung =)
Hier meine SP:
DECLARE @Database VARCHAR(255)
DECLARE @cmd varchar(1000)
DECLARE @pktablename nvarchar(255)
DECLARE DatabaseCursor CURSOR FOR select name from sys.databases
WHERE name NOT IN ('master','model','msdb','tempdb','distribution','ReportServerTempDB')
--WHERE name IN ('Account_DE')
ORDER BY 1
OPEN DatabaseCursor
FETCH NEXT FROM DatabaseCursor INTO @Database
WHILE @@FETCH_STATUS = 0
BEGIN
--exec sp_dboption @Database, 'db_chaining', 'true'
--exec sp_configure 'Cross DB Ownership Chaining', '1';
-- RECONFIGURE
EXEC ('use '+@Database);
DECLARE TableCursor CURSOR FOR select name from sys.tables ORDER BY 1
DECLARE @tables varchar(max)
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @Tables
WHILE @@FETCH_STATUS = 0
BEGIN
declare @SQL nvarchar(max), @pkname nvarchar(255)
print ''
print @Database + ' -> ' + @tables
DECLARE PKZeug CURSOR FOR (SELECT DISTINCT tc.CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu ON tc.CONSTRAINT_NAME = ccu.Constraint_name
WHERE (tc.CONSTRAINT_TYPE = 'Primary Key' OR tc.CONSTRAINT_TYPE = 'Foreign Key') AND tc.TABLE_NAME = Convert(nvarchar(100),@tables))
Open PKZeug
FETCH NEXT FROM PKZeug INTO @pkname
WHILE @@FETCH_STATUS = 0
BEGIN
print ' ALTER TABLE ' + Convert(nvarchar(100),@tables) + ' DROP CONSTRAINT '+Convert(nvarchar(100),@pkname) +';'
select @SQL = 'ALTER TABLE ' + Convert(nvarchar(250),@tables) + ' DROP CONSTRAINT '+Convert(nvarchar(250),@pkname) +';'
EXEC sp_executesql @sql
--print @pkname
FETCH NEXT FROM PKZeug INTO @pkname
end
CLOSE PKZeug
DEALLOCATE PKZeug
FETCH NEXT FROM TableCursor INTO @Tables
end
CLOSE TableCursor
DEALLOCATE TableCursor
FETCH NEXT FROM DatabaseCursor INTO @Database
end
CLOSE DatabaseCursor
DEALLOCATE DatabaseCursor