Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];

Вниз

Вопрос по SET ANSI NULLS   Найти похожие ветки 

 
AndrewK   (2004-01-16 16:05) [0]

Доброго времени суток, господа.

Подскажите, пожалуйста, как можно создать таблицу в MSSQL 2K чтобы в нее можно было вставлять значения NULL.

Есть такой код

CREATE PROCEDURE
lib_spTableObjectParameterCreate
@ObjectTypeName varchar(250)
AS

begin transaction Trans

declare @SQL varchar(2000)

set @SQL = " CREATE TABLE [dbo].["+@ObjectTypeName+"] ([Object_ID] [int] NOT NULL) ON [PRIMARY] "
exec (@SQL)

commit transaction Trans
GO


Эта процедура создает базовую таблицу. Другая процедура добавляет в нее столбцы:


CREATE PROCEDURE
TableObjectParameterColumnAdd
@TableName varchar(250),
@ColumnName varchar(250),
@Type varchar(20),
@Length int,
@Precision int,
@Scale int,
@AllowNulls bit
AS

declare @Nullable varchar(10)
select @Nullable = case @AllowNulls
when 1 then " not null "
when 0 then " null "
end

declare @SQL varchar(1000)
set @SQL = "alter table "+@TableName+" add "+@ColumnName+" "
set @SQL = @SQL + case
when @Type = "int" then @Type+@Nullable
when @Type = "char" then @Type+"("+LTrim(Str(@Length))+")"+@Nullable
when @Type = "decimal" then @Type+"("+LTrim(Str(@Precision))+", "+LTrim(Str(@Scale))+")"+@Nullable
end
exec (@SQL)
GO


Процедура TableObjectParameterColumnAdd отказывается добавлять колонки с параметром @AllowNulls = 1, т.е. создавать столбцы в которых запрещено хранить значения NULL. Выводится системное сообщение:

ALTER TABLE only allows columns to be added that can contain nulls or have a DEFAULT definition specified. Column "test1" cannot be added to table "lib_Paramstest" because it does not allow nulls and does not specify a DEFAULT definition.

Насколько я понял, необходимо создать таблицу с параметром SET ANSI NULLS ON. Как это сделать в рамках данных хранимых процедур?


 
ZrenBy   (2004-01-16 16:13) [1]

Там же все написано

NULL | NOT NULL

Specifies whether the column can accept null values. Columns that do not allow null values can be added with ALTER TABLE only if they have a default specified. A new column added to a table must either allow null values, or the column must be specified with a default value.

If the new column allows null values and no default is specified, the new column contains a null value for each row in the table. If the new column allows null values and a default definition is added with the new column, the WITH VALUES option can be used to store the default value in the new column for each existing row in the table.

If the new column does not allow null values, a DEFAULT definition must be added with the new column, and the new column automatically loads with the default value in the new columns in each existing row.

NULL can be specified in ALTER COLUMN to make a NOT NULL column allow null values, except for columns in PRIMARY KEY constraints. NOT NULL can be specified in ALTER COLUMN only if the column contains no null values. The null values must be updated to some value before the ALTER COLUMN NOT NULL is allowed, such as:

UPDATE MyTable SET NullCol = N"some_value" WHERE NullCol IS NULL

ALTER TABLE MyTable ALTER COLUMN NullCOl NVARCHAR(20) NOT NULL


 
AndrewK   (2004-01-16 16:27) [2]

Я не преобразовываю столбцы а создаю новые.


 
paul_k   (2004-01-16 16:30) [3]

Отлично, создавай.
Но указать им NULL или NOT NULL надо бы...


 
AndrewK   (2004-01-16 16:31) [4]

...

declare @Nullable varchar(10)
select @Nullable = case @AllowNulls
when 1 then " not null "
when 0 then " null "
end

declare @SQL varchar(1000)
set @SQL = "alter table "+@TableName+" add "+@ColumnName+" "
set @SQL = @SQL + case
when @Type = "int" then @Type+@Nullable
when @Type = "char" then @Type+"("+LTrim(Str(@Length))+")"+@Nullable
when @Type = "decimal" then @Type+"("+LTrim(Str(@Precision))+", "+LTrim(Str(@Scale))+")"+@Nullable
end
exec (@SQL)


 
ZrenBy   (2004-01-16 16:33) [5]

Перевести, что ль ... ? Или не надо ... ?
Хотя, ..., через полчаса в баню водку пивом запивать ...
А ... ну все в болото...


 
paul_k   (2004-01-16 16:41) [6]

погорячился я...


 
Nikolay M.   (2004-01-16 16:57) [7]

Текст сообщения не пробовал читать?


> ALTER TABLE only allows columns to be added that can contain
> nulls or have a DEFAULT definition specified. Column "test1"
> cannot be added to table "lib_Paramstest" because it does
> not allow nulls and does not specify a DEFAULT definition.


А SET ANSI_NULLS тут вообще не при чем, хоть бя BOL про него почитал?


 
AndrewK   (2004-01-16 16:59) [8]

Чтож это за наезды сегодня. Если у кого-то плохой день, то это его проблемы.

Я спросил вежливо, в ответ же ...

Задача решена. Спасибо ZrenBy. При детальном прочтении нашел у себя ошибку.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.032 c
1-16437
C@N
2004-01-18 12:53
2004.02.06
Замена/расширение возможности стандартных инищек


8-16538
pasha_676
2003-10-03 10:13
2004.02.06
Управление видеомагнитофоном по FireWire


1-16346
able
2004-01-23 18:02
2004.02.06
---|Ветка была без названия|---


1-16357
denis24
2004-01-24 10:21
2004.02.06
выпадающий список у combobox


8-16539
nester
2003-10-05 16:18
2004.02.06
Как сохранить TImage в gif?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский