08. december 2009 - 15:56Der er
7 kommentarer og 1 løsning
Script til at tilføje Primary Key til alle tabeller
Hej.
Jeg har importeret nogle Access databaser ind i MS SQL Server 2005.
Access skal stadig benyttes from frontend, så derfor er der lavet nogle linkede tabeller via ODBC, men for at det virker ordentlig, så skal der jo være et primary key felt i hver tabel, og det er der ikke.
Jeg er kommet så langt så jeg får oprettet et nyt felt, men det kniber med at få sat den som primary key fordi jeg mangler at få givet den pågældende primary key et unikt navn.
Så hvordan får jeg lavet "PK_myTable" om så den indeholder navnet på den tabel som scriptet er ved at håndtere?
Det virker ikke at skrive "PK_?" da jo så bliver til "PK_dbo."
*****************************************
USE [myDB] BEGIN TRANSACTION SET QUOTED_IDENTIFIER ON SET ARITHABORT ON SET NUMERIC_ROUNDABORT OFF SET CONCAT_NULL_YIELDS_NULL ON SET ANSI_NULLS ON SET ANSI_PADDING ON SET ANSI_WARNINGS ON COMMIT BEGIN TRANSACTION GO EXEC sp_MSforeachtable @command1='ALTER TABLE ? ADD MemId int NOT NULL IDENTITY (1, 1)' GO EXEC sp_MSforeachtable @command1='ALTER TABLE ? ADD CONSTRAINT PK_myTable PRIMARY KEY CLUSTERED ( MemId ) WITH( STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]' COMMIT GO *****************************************
Hi Snowball Did you use Access's upsizing Wizard? If you did, then I'm surprised that the primary key wasnt copied over automatically. Unless of course you didnt have one in the first place :o)
Det er ikke specielt elegant, men jeg ville nok generere mine sql-statements i én query, og så manuelt eksekvere dem bagefter.
Noget i stil med:
SELECT 'ALTER TABLE ' + name + ' ADD CONSTRAINT PK_' + name + ' PRIMARY KEY CLUSTERED (MemId)' FROM sys.objects WHERE type = 'U'
Jeg kan ikke lige huske om sys.objects har en type-kolonne, men ellers hedder den noget i den stil. 'U' betyder "user table".
Ovenstående script burde returnere de ca. 70 rows med hver deres alter table statement. Og så er det bare at kopiere de 70 linjer op i query vinduet, og trykke på F5 mens man krydser fingre :)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.