SQL Server ->> 生成代码把表字段从NULL改为NOT NULL

一般我们用SELECT .... INTO语句生成的表字段都是允许为NULL。而如果我们需要改成NOT NULL呢

select ‘ALTER TABLE dbo.XXXXXXX ALTER COLUMN ‘ +
QUOTENAME(c.name) + ‘ ‘ + t.name +
case when t.name in (‘nvarchar‘,‘nchar‘)
        then ‘(‘+ cast(c.max_length/2 as nvarchar) +‘)‘
    when t.name in (‘varchar‘,‘binary‘, ‘char‘, ‘varbinary‘)
        then ‘(‘+ cast(c.max_length as nvarchar) +‘)‘
else ‘‘ end + ‘ NOT NULL‘
from sys.columns c join sys.types t on c.system_type_id = t.system_type_id
where object_id = object_id (‘dbo.XXXXXXX‘) and t.name <> ‘sysname‘
order by column_id 

有时需要准备数据库设计文档,里面的物理设计这块需要填写像这样的表


Table: dbo.DimMonth


Column Name


Data Type


Key


Nullable


Comment


Monthkey


bigint


PK


No


CalendarMonth


bigint


No


CalendarMonthName


nvarchar(30)


No


CalendarQuarter


bigint


No


CalendarQuarterName


nvarchar(30)


No


CalendarYear


bigint


No


CalendarYearName


nvarchar(30)


No


FiscalMonthName


nvarchar(30)


No


FiscalMonthOfYear


bigint


No


FiscalQuarter


bigint


No


FiscalQuarterName


nvarchar(30)


No


FiscalYear


bigint


No


FiscalYearName


nvarchar(30)


No

如果比本身已经建立好在数据库中,我们可以通过一条脚本生成

select c.name, t.name + case when t.name in (‘nvarchar‘,‘nchar‘)
        then ‘(‘+ cast(c.max_length/2 as nvarchar) +‘)‘
    when t.name in (‘varchar‘,‘binary‘, ‘char‘, ‘varbinary‘)
        then ‘(‘+ cast(c.max_length as nvarchar) +‘)‘
else ‘‘ end, case when c.is_nullable = 1 then ‘Yes‘ ELSE ‘No‘ end
from sys.columns c join sys.types t on c.system_type_id = t.system_type_id
where object_id = object_id (‘dbo.XXXXXXX‘) and t.name <> ‘sysname‘
order by column_id 
时间: 2024-10-29 22:39:00

SQL Server ->> 生成代码把表字段从NULL改为NOT NULL的相关文章

mysql,sql server,oracle 唯一索引字段是否允许出现多个 null 值?

最近一个项目,涉及到sql server 2008,因为业务需求,希望建立一个唯一索引,但是发现在sql server中,唯一索引字段不能出现多个null值,下面是报错信息: CREATE UNIQUE NONCLUSTERED INDEX weixin_openid_ui ON Users(weixin_openid); 因为发现对象名称 'dbo.Users' 和索引名称 'weixin_openid_ui' 有重复的键,所以 CREATE UNIQUE INDEX 语句终止.重复的键值为

SQL Server -&gt;&gt; 生成Numbers辅助表

if object_id('MyDB.dbo.Numbers') is not null drop table MyDB.dbo.Numbers go use [MyDB] go create table dbo.Numbers(ID INT NOT NULL) go create unique clustered index ix_uniq_clst_numbers_id on dbo.Numbers(id) go with t as ( select row_number() over (o

【SQL Server】sql server更改了数据表的字段/新增数据表的字段 无法保存

sql server更改了数据表的字段/新增数据表的字段  无法保存 解决方法:进入 工具-->选项-->Designers-->表设计器和数据库设计器-->取消勾选   即可

SQL Server -为代码减负之触发器

触发器是一张表的增删改操作,引起或触发对另一张表的增删改操作,所以触发器便有3种类型,分别是deleted触发器,Update触发器,insert触发器 触发器又根据替换原来的增删改操作,还是在原来的增删改完成之后进行增删改操作,分为Instead of触发器和For或者After触发器(for和after属于一种触发器) 触发器的使用涉及到两张非常重要的表用来保存已经改变或者已经在第一章被操作的表上不存在的记录,分别是虚拟表Inserted和虚拟表Deleted 虚拟表Inserted 虚拟表

清空SQL Server数据库中所有表数据的方法

其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入死循环,二是这里使用了微软未正式公开的sp_MSForEachTable存储过程. 也许很多读者朋友都经历过这样的事情:要在开发数据库基础上清理一个空库,但由于对数据库结构缺乏整体了解,在删除一个表的记录时,删除不了,因为可能有外键约束,一个常见的数据库结构是一个主表,一个子表,这种情况下一般都得先删除子表记录,再删除主表记录. 说道删除数据记录,

SQL Server中临时表与表变量的区别

2009年02月20日 星期五  19:31 我 们在数据库中使用表的时候,经常会遇到两种使用表的方法,分别就是使用临时表及表变量.在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们 实现的功能基本上是一样的,可如何在一个存储过程中有时候去使用临时表而不使用表变量,有时候去使用表变量而不使用临时表呢? 临时表 临时表与永久表相似,只是它的创建是在Tempdb中,它只有在一个数据库连接结束后或者由SQL命令DROP掉,才会消失,否则就会一直存在.临时表在创建的时候都会产生SQL Ser

在 SQL Server 中查询EXCEL 表中的数据遇到的各种问题

原文:在 SQL Server 中查询EXCEL 表中的数据遇到的各种问题 SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="D:\KK.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$] 问题: 消息 15281,级别 16,状态 1,第 1 行 SQL Server 阻止了对组件 'Ad Hoc Di

oracle 、sql server 、mysql 复制表数据

我们知道在oracle 中复制表数据的方式是使用 create table table_name as select * from table_name 而在sql server  中是不能这么使用的 语句如下: select * into table_name from table_name; 而在 mysql 中有两种方式 1. create table a like b 2. 类似oracle的方式 create table table_name as select * from tabl

SQL Server 2008重新保存表时出错

在使用SQL Server 2008时,修改了表的字段名和类型名之后,点击保存按钮之后出现如下对话框: 解决方法: 点击Tools-->Options,在出现的对话框中点击Designers-->Table and Dababase Designers,出现如下画面,将右边的“Prevent saving changes that require table re-creation” 前的勾选去掉即可,然后点击OK按钮 SQL Server 2008重新保存表时出错,布布扣,bubuko.co