Es gibt eine neue Funktionen im SQL Server 2005 aber auch Kompatibitätsprobleme.
Folgende Scripts wurde vom SQL Server 2005 generiert und ist nun auf dem SQL Server 2000 leider nicht mehr lauffähig. SQL Server 2005 [1]SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[machblog_subscriber]‘) AND type in (N’U‘))
BEGIN
CREATE TABLE [dbo].[machblog_subscriber](
[subscriber_email] [nvarchar](100) NOT NULL,
[dt_created] [datetime] NOT NULL,
[ip_created] [varchar](15) NOT NULL,
CONSTRAINT [PK_machblog_subscriber_1] PRIMARY KEY CLUSTERED
(
[subscriber_email] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO Das erste Problem ist bereits das die Systemobjekte umbenannt wurden: Im 2000er hiessen sie „dbo.sysobjects“ und im 2005er heissen sie nun sys.objects. Es sind somit auch andere Benutzer nämlich nicht mehr databaseowner, sondern system.
Der komplette String: „WITH (IGNORE_DUP_KEY=OFF)“ kann ersatzlos gestrichen werden, denn „IGNORE_DUP_KEY=OFF“ gibt es im 2000er nicht.
SQL Server 2000 [1]SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[machblog_subscriber]‘) and OBJECTPROPERTY(id, N’IsUserTable‘) = 1)
DROP TABLE [dbo].[machblog_subscriber]
GO
BEGIN
CREATE TABLE [dbo].[machblog_subscriber](
[subscriber_email] [nvarchar](100) NOT NULL,
[dt_created] [datetime] NOT NULL,
[ip_created] [varchar](15) NOT NULL,
CONSTRAINT [PK_machblog_subscriber_1] PRIMARY KEY CLUSTERED
(
[subscriber_email] ASC
) ON [PRIMARY]
) ON [PRIMARY]
END
GO Im 2. Beispiel nannte Microsoft die Tabellen im SQL Server 2000, in der die ForeignKeys abgelegt werden „dbo.sysforeignkeys“. Im 2005er heissen diese Tabellen nun sinniger Weise „sys.foreign_keys“.
SQL Server 2005 [2]IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_users_users]‘) AND parent_object_id = OBJECT_ID(N'[dbo].[machblog_user]‘))
ALTER TABLE [dbo].[machblog_user] WITH CHECK ADD CONSTRAINT [FK_users_users] FOREIGN KEY([created_by_id])
REFERENCES [dbo].[machblog_user] ([user_id])
GO Eine weitere Umbenamselung ist die „Object_ID“, die nun logischer Weise „fkeyid“ heisst und das „parent_object_id“ nun „rkeyid“, wobei das r wohl für root stehen soll.
SQL Server 2000 [2]IF NOT EXISTS (SELECT * FROM dbo.sysforeignkeys WHERE fkeyid = OBJECT_ID(N'[dbo].[FK_users_users]‘) AND rkeyid = OBJECT_ID(N'[dbo].[machblog_user]‘))
ALTER TABLE [dbo].[machblog_user] WITH CHECK ADD CONSTRAINT [FK_users_users] FOREIGN KEY([created_by_id])
REFERENCES [dbo].[machblog_user] ([user_id])
GO SQL Server |
Add Comment (0) |