Zum ersten Mal habe ich SQL Server Management Studio Express und Visual Studio 2005 auf meinem System installiert. Jetzt versuche ich, eine Tabelle mit dem folgenden Skript zu erstellen. Aber wenn ich einmal exekutiere, stoße ich auf Fehler
Die CREATE TABLE-Berechtigung wurde in .__ verweigert. Datenbank 'Tempdb'.
Warum es? Kann mir jemand helfen, wie ich das lösen kann?
USE [tempdb]
GO
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Employee]
([FirstName] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[LastName] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL
) ON [PRIMARY]
Danke Raju
Meine erste Vermutung ist, dass Sie auf diesem Server keine CREATE-Tabellenrechte haben. Können Sie bitte die folgenden Abfragen ausführen?
-- get login first
select suser_name()
--or
SELECT SYSTEM_USER
-- Now get the permissions assigned to you by the server administrator
use tempDB
GO
;with getPermissions as ( SELECT * FROM fn_my_permissions (NULL, 'DATABASE') )
select permission_name from getPermissions
where permission_name like 'create%'
GO
Wenn die Spalte permission_name 0 Zeilen zurückgibt, bedeutet dies, dass Sie keine CREATE-Berechtigung für diese Datenbank haben. Wenden Sie sich an Ihren DBA, um db_ddladmin für die TempDB zu gewähren. Wie Andomar jedoch bemerkt, werden die temporären Tabellen automatisch in der temporären Datenbank erstellt, wenn sie mit # ..__ angehängt werden.
Ich ging in die Datenbank, Sicherheit, Benutzer, klicken Sie mit der rechten Maustaste auf den Benutzer, Eigenschaften .. _. Mitgliedschaft, überprüft Db_owner.
Use tempdb
GO
Create User MyUserName For Login MyUserName with Default_Schema= [dbo];
go
use tempdb
go
EXEC sp_addrolemember 'db_ddladmin', N'MyUserName'
go
Sie benötigen die Rolle db_ddladmin, damit der vorgesehene Benutzer eine neue Tabelle erstellen kann. db_datawriter könnte also nicht ausreichen.
Sie versuchen, eine permanente Tabelle in tempdb
zu erstellen. Das ist ziemlich ungewöhnlich. Tempdb wird bei jedem Neustart des SQL Server-Dienstes vollständig gelöscht.
Normalerweise erstellen Sie eine temporäre Tabelle:
create table #TempTable (...
Der #
macht es zu einer lokalen (verbindungsspezifischen) temporären Tabelle. Eine globale temporäre Tabelle beginnt mit ##
. Für das Erstellen einer temporären Tabelle sind keine besonderen Rechte erforderlich.
Ich stand auch vor diesem Problem. Es wurde danach gesucht, die meisten Antworten waren von db_owner, dies wurde auch im Security-Menüelement überprüft, aber es wurde nicht angezeigt. Während der Suche bin ich zu this blog gegangen. Ivan Dimitrov 's Antwort gab mir einen kleinen Hinweis. Meine Abfrage bei der Tabellenerstellung war:
CREATE TABLE [dbo].[Album](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](150) NULL,
[Description] [nvarchar](500) NULL,
[TrackCount] [int] NULL,
[ReleaseYear] [int] NULL,
[Distributor] [nvarchar](500) NULL,
[ImageUrl] [nvarchar](max) NULL,
[CreatedDate] [datetime] NULL,
CONSTRAINT [PK_Album] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Ich habe das [dbo] entfernt. aus der Abfrage und dann ausgeführt, erfolgreich ausgeführt. Vielleicht ist es keine vollständige Lösung, aber ich habe irgendwie damit gearbeitet.
Ich bin nicht sicher, ob diese Antwort hilfreich sein wird, aber ich habe ein ähnliches Problem erlebt, und so habe ich es gelöst. Das Problem, das mir auftrat, war auf die Tatsache zurückzuführen, dass meine 'create table' standardmäßig auf tempdb gesetzt war und ich den Datenbanknamen angeben musste. Wie andere bereits festgestellt haben, habe ich bei meinen DB-Zugriffsoperatoren nachgefragt, ob ich die Berechtigung zum Erstellen von Tabellen hatte. Da ich bereits über die erforderlichen Berechtigungen verfügte, fand ich die Lösung unten.
Der folgende Fehler hat den Tempdb-Fehler zurückgegeben:
driver={SQL Server};server=YOUR_SERVER_NAME;trusted_connection=true
Nachdem ich den Namen der Datenbank eingegeben hatte, funktionierte der Code gut. Hier ist der Code, der für mich funktioniert hat:
driver={SQL Server};server=YOUR_SERVER_NAME;database=YOUR_DATABASE_NAME;trusted_connection=true'
Ich hoffe dieser Beitrag ist hilfreich!