Создать разрешение таблицы отказано в базе данных "tempdb"
впервые я установил SQL Server Management Studio Express и Visual Studio 2005 в своей системе. Теперь я пытаюсь создать таблицу, используя сценарий ниже. Но если я выполняю, я сталкиваюсь с ошибкой, как
создать таблицу разрешение отказано в базе данных "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]
спасибо Раджу!--2-->
5 ответов
мое первоначальное предположение, что у вас нет прав на создание таблицы на этом сервере. Можете ли вы запустить этот набор запросов ниже?
-- 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
Если столбец permission_name возвращает 0 строк, это означает, что у вас нет разрешения на создание этой БД. обратитесь к DBA, чтобы предоставить db_ddladmin для tempDB. Однако, как отметил Andomar временные таблицы автоматически создаются в базе данных tempdb, когда предваряет с #.
Я вошел в базу данных, безопасность, пользователи, щелкните правой кнопкой мыши на пользователе, свойства. Членство, проверено предопределенной.
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 будет недостаточно.
вы пытаетесь создать постоянную таблицу в tempdb
. Это довольно необычно, tempdb полностью уничтожается при перезапуске службы SQL Server.
обычный способ создания временной таблицы:
create table #TempTable (...
на #
делает его локальной (специфичной для подключения) временной таблицей. Глобальная временная таблица начинается с ##
. Для создания временной таблицы таким образом не требуются специальные права.
Я тоже столкнулся с этой проблемой. Искал его, большинство ответов были db_owner, проверил это тоже в пункте меню "Безопасность", но он не показывался. Во время поиска я пошел в этой блог. Иван Димитровответ дал мне небольшой намек. Мой запрос create table был:
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]. из запроса, а затем запустил его, успешно выполнил. Возможно, это не полное решение, но мне удалось работать с ним как-то.