2017-02-20 3 views
-1

ОбновленоСделать значение по умолчанию в поле совпадает с именем базы данных в сервере SQL 2014

Я хотел бы создать таблицу базы данных, которая содержит имя базы данных для каждой записи, которая получает созданную и сцепляет его с auto-incrementing number. Пожалуйста, смотрите ниже, что я пытаюсь сделать:

CREATE DATABASE TEST_1234_5678 
GO 
USE TEST_1234_5678 
GO 

CREATE TABLE TBL_ANALYSIS 
(ID INT NOT NULL IDENTITY(1,1), 
DATABASE_NAME VARCHAR(14) DEFAULT DB_NAME() 
DESIRED_ID VARCHAR(20) DEFAULT DATABASE_NAME + CAST(ID AS VARCHAR) 
); 

Я не могу назначить DESIRED_ID.

+0

Это работает для меня: 'INSERT INTO TBL_ANALYSIS DEFAULT VALUES;' –

+1

Какую ошибку вы видите? –

+0

DB_NAME() requieres ALTER ANY DATABASE permissions – McNets

ответ

1

Прежде всего, работа CREATE DATABASE не переключает вас в этот контекст. Если, например, я в настоящее время подключен к My_DB и запустил команду CREATE DATABASE, возможно, DB, но я все равно буду работать с My_DB.

Я только указываю на это, потому что ваш вопрос не показывает, что вы переключаете контекст БД, и это может быть актуально, в зависимости от того, как настроен ваш сервер.

CREATE DATABASE TEST_1234_5678 
GO 

USE TEST_1234_5678 
GO 

CREATE TABLE TBL_ANALYSIS 
(ID INT NOT NULL IDENTITY(1,1), 
DATABASE_NAME VARCHAR(14) DEFAULT DB_NAME() 
) 
GO 

INSERT INTO TBL_ANALYSIS DEFAULT VALUES 
GO 

В зависимости от ошибки, которую вы получаете, это может быть несколько разных вещей. Предполагая, что вы находитесь в правильном контексте и подключены как пользователь с разрешениями, сообщение об ошибке, которое вы получаете, может быть чрезвычайно важно для решения проблемы. Я бы рекомендовал, чтобы вы переключали контексты, и если он все еще не работает для вас, вы можете рассмотреть вопрос о редактировании своего вопроса и опубликовать фактическое сообщение об ошибке.

EDIT: After getting some more information from you, I understand that the issue is in trying to create a column with a default value based on other columns in the table. This isn't something that is supported in SQL Server, but you can use a computed column to get the same information. Since this isn't a complex operation, you could do something as simple as this:

CREATE DATABASE TEST_1234_5678 
GO 

USE TEST_1234_5678 
GO 

CREATE TABLE TBL_ANALYSIS 
(
    ID INT NOT NULL IDENTITY(1,1) 
    ,DATABASE_NAME VARCHAR(14) DEFAULT DB_NAME() 
    ,DESIRED_ID AS DATABASE_NAME + CAST(ID AS VARCHAR(14))  
) 
GO 

INSERT INTO TBL_ANALYSIS DEFAULT VALUES 
GO 

SELECT * FROM TBL_ANALYSIS 
GO 
+0

Я просмотрел то, что написал, и понял, что ошибка исходила из части конкатенации. Вот CREATE TABLE TBL_ANALYSIS (ID INT NOT NULL IDENTITY (1,1), DATABASE_NAME УАКСНАК (14) По умолчанию DB_NAME(), DESIRED_ID VARCHAR (20) По умолчанию DATABASE_NAME + CAST (ID AS VARCHAR) ); Это дает мне ошибку: В этом контексте имя «ID» не разрешено. Допустимыми выражениями являются константы, константные выражения и (в некоторых контекстах) переменные. Имена столбцов запрещены. – Xavier

+0

Хорошо, так что по существу ваш вопрос вводит в заблуждение людей. Проблема заключается не в том, что вы получаете сообщение об ошибке, связанной с использованием DB_NAME(), а в том, что значение concatenated default, которое вы пытаетесь вставить в DESIRED_ID. – 3BK

+1

@ Xavier Обновлен мой ответ, чтобы быть более релевантным для вашего фактического вопроса. Я очень рекомендую вам добавить/изменить исходный вопрос, чтобы отразить фактическую проблему - все думают, что ваша проблема заключается в том, что DB_NAME() используется как значение по умолчанию. – 3BK

Смежные вопросы