CREATE TABLE разрешено в базе данных 'tempdb'

Впервые я установил SQL Server Management Studio Express и Visual Studio 2005 в свою систему. Теперь я пытаюсь создать таблицу, используя ниже script. Но если однажды я выполню, я столкнулся с ошибкой, например

Разрешено разрешение CREATE TABLE база данных 'tempdb'.

Почему это так? Может ли кто-нибудь помочь мне, как это решить?

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]

Спасибо Раджу

Ответ 1

Мое первоначальное предположение: у вас нет прав CREATE на этом сервере. Вы можете запустить этот набор запросов ниже?


-- 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

Если column_name столбец возвращает 0 строк, это означает, что у вас нет разрешения CREATE в этой БД. свяжитесь с вашим администратором базы данных, чтобы предоставить db_ddladmin для tempDB. Однако, как отметил Андомар, временные таблицы автоматически создаются в tempDB, когда предварительно добавлены С#.

Ответ 2

Я пошел в базу данных, безопасность, пользователи, щелкнул правой кнопкой мыши пользователя, свойства. Членство, проверено db_owner.

Ответ 3

Вы пытаетесь создать постоянную таблицу в tempdb. Это довольно необычно, tempdb полностью уничтожается при перезагрузке службы SQL Server.

Обычный способ создания временной таблицы:

create table #TempTable (...

# делает его локальной (привязанной к конкретному соединению) временной таблицы. Глобальная временная таблица начинается с ##. Для создания временной таблицы не требуется никаких специальных прав.

Ответ 4

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

Вам нужна роль db_ddladmin для предполагаемого пользователя для создания новой таблицы. поэтому роль db_datawriter будет недостаточной.

Ответ 5

Я тоже столкнулся с этой проблемой. Искал его, большинство ответов было из db_owner, также проверили это в пункте меню Security, но он не показывался. Во время поиска я пошел в этот блог. Ответ Иван Димитров дал мне немного намека. Мой запрос на создание таблицы:

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]

Я удалил [dbo]. из запроса и выполнил его, выполнив его успешно. Возможно, это не полное решение, но мне удалось как-то с ним работать.