Есть ли возможность изменить столбец с «Разрешает null» на «не разрешать null» без знания фактического типа данных столбца? неИзменение столбца (null -> not null) без знания типа данных
Я думаю, что нет, так что я сделал в качестве основного кода скелета для моей хранимой процедуры:
SELECT t.name,c.max_length FROM sys.types t
LEFT JOIN sys.columns c ON(t.system_type_id = c.system_type_id)
WHERE object_id=OBJECT_ID(@TableName) AND [email protected];
и
EXEC('UPDATE ' + @TableName + ' SET ' + @FieldName + ' = ' + @DefaultValue + ' WHERE ' + @FieldName + ' IS NULL');
EXEC('ALTER TABLE ' + @TableName + ' ALTER COLUMN ' + @FieldName + ' NOT NULL');
Я думаю, теперь я только должен получить возвращаемые значения из первый запрос обратно во второй. Я не могу понять, как получить значения в переменной, а затем снова получить к ним доступ. Идеи?
Ваш первый запрос сломана. У вас есть переменные, застрявшие в середине строки ... если вы не используете параметризованный динамический sql. Настоящая проблема здесь заключается в том, что совсем не ясно, что вы пытаетесь сделать. И, конечно, вам не хватает еще одного логического элемента такого типа изменений. Вы пытаетесь установить столбец, чтобы он не разрешал значение null, но вы не проверяете, есть ли какие-либо строки с NULL для этого столбца. Если есть, это вызовет исключение. Возможно, объяснение требований в порядке. –
С вашим последним правлением у вас все еще есть некоторые проблемы. Вы не можете просто установить для столбца значение null в инструкции alter. Он ДОЛЖЕН включать тип данных. –
Я изменил свой вопрос, чтобы включить ваши предложения. Требование состоит в том, что я хочу сохранить тип данных в столбце, не зная, что это такое, но перед добавлением ПК установите столбец «не null». – Alexander