sql server 创建table表 及添加各种约束 查看约束 删除约束 新增表的字段 规则及规则使用方法及应用到表中 时间函数的类型

use Test1
go
create table tb_person
(
id int identity(1,1) primary key not null, --要把该列设置为主键列就用 primary key --
name varchar(20) not null,
sex char(2) not null,
cardid char(25) not null, -- 身份证编号--
age int not null,
currenttime datetime not null,
ksid int not null,
jg varchar(20),
sf varchar(10) null,
city varchar(20) null default '成都', --在添加列的时候可以给添加默认值
address varchar(100) null,
docid int null,
)--使用语法创建表--




--添加主键约束--


alter table tb_person
add constraint PK_pid primary key (id) --主键约束用PK_....
go


--检查约束 一定是返回为true或false的表达结果--
alter table tb_person
add constraint CK_age check (age < 150 and age >0) --比如查询年龄不能大于150岁 ,小于0岁 关键字and--  --检查约束用CK_....


alter table tb_person with nocheck
add constraint CK_SEX Check(sex = '男' or sex ='女')--检查性别只能两种 男,或者 女, 关键字 or
go


--唯一性约束,表示该列的值是唯一的--
alter table tb_person
add constraint UQ_CardId unique(cardid)   --唯一性约束用UQ_....
go


--添加的是默认约束--


alter table tb_person
add constraint DK_Address default('地址不详') for address  --默认约束用DK_....
go


--添加外键约束,保证在我们在引用别的表的数据的时候,该数据在其他表示存在的--


alter table tb_person
add constraint FK_KSID foreign key (ksid) references tb_ks(ksid)  --外键约束用FK_....
go


 --如果我们在添加约束之前,都已经存在了数据,而这个数据不符合我们的外键约束
 --解决方法:
 --1)删除之前的数据(不推荐)
 --2)在创建约束的时候,告诉系统不再检查之间的数据。 with nocheck
 -- 语法如下:
alter table tb_person with nocheck
add constraint FK_KSID foreign key (ksid) references tb_ks(ksid)  --外键约束用FK_....
go

alter table tb_person with nocheck
add constraint FK_DOCID foreign key(docid) references tb_doc(docid)
go 


--在数据库中查看约束--
--name表示约束的名称--
select *from sysobjects where name='ck_age'


--在数据库中删除约束,比如删除上面的年龄--
alter table tb_person
drop constraint ck_age
go


--新增表的字段--
--对表重新添加一列--
alter table tb_doc
add docage int not null default 30
go


--建议在创建表之后就立马把外键约束创建好










规则:
--规则是一个向后兼容的功能,用于执行一些 CHECK 约束相同的功能。
--CHECK约束是用来限制列值的首选标准方法。
--CHECK约束比规则更简明,一个列只能应用一个规则,但是却可以应用多个 CHECK 约束。
--CHECK约束作为 CREATE TABLE 语句的一部分进行制定,而规则以单独的对象创建,然后绑定到列上。
--     区别:约束只能正对单表。而规则可以正对多张表。





--规则的使用方法
--1)   对年龄做一个规则的语法--      
--注意在TSQL中变量钱要加@符号
--create rule  规则名字 规则变量 变量的值的范围
--例如:
create rule agerule as @ageid between 1 and 150   
go


--2)把这个规则应用某个表中
--需要调用系统内置的存储过程
-- sp_bindrule 第一个参数表示规则的名字,第二个参数制定所限制的列名(表名.列名)
--例如:
exec sp_bindrule 'agerule','tb_person.age'
go




--另外:在sql server 取数据库服务器的系统时间。取系统时间的函数:getdate()  时间的类型 datetime

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个SQL Server函数,用于解析JSON对象字段及JSON数组,但不使用OPENJSON函数: ``` CREATE FUNCTION ParseJsonWithoutOpenJson (@json NVARCHAR(MAX)) RETURNS TABLE AS RETURN WITH CTE AS ( SELECT CHARINDEX('{', @json) AS StartIndex, CHARINDEX('}', @json) AS EndIndex UNION ALL SELECT CHARINDEX('{', @json, EndIndex + 1) AS StartIndex, CHARINDEX('}', @json, EndIndex + 1) AS EndIndex FROM CTE WHERE StartIndex > 0 AND EndIndex > 0 ) , JsonTable AS ( SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNum, SUBSTRING(@json, StartIndex, EndIndex - StartIndex + 1) AS JsonString FROM CTE ) , JsonFields AS ( SELECT RowNum, SUBSTRING(JsonString, 2, CHARINDEX(':', JsonString) - 2) AS Name, SUBSTRING(JsonString, CHARINDEX(':', JsonString) + 1, LEN(JsonString) - CHARINDEX(':', JsonString)) AS Value FROM JsonTable WHERE JsonString LIKE '"%"%:%' ) , JsonArrays AS ( SELECT RowNum, SUBSTRING(JsonString, 2, CHARINDEX(':', JsonString) - 2) AS Name, SUBSTRING(JsonString, CHARINDEX(':', JsonString) + 1, LEN(JsonString) - CHARINDEX(':', JsonString)) AS ArrayString FROM JsonTable WHERE JsonString LIKE '"%"%:[%' ) , JsonArrayItems AS ( SELECT RowNum, Name, SUBSTRING(ArrayString, IIF(ItemNum = 1, 2, ItemStartIndex), ItemEndIndex - IIF(ItemNum = 1, 2, ItemStartIndex) + 1) AS Value FROM JsonArrays CROSS APPLY ( SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS ItemNum, CHARINDEX('"', ArrayString, ItemStartIndex + 1) AS ItemStartIndex, CHARINDEX('"', ArrayString, CHARINDEX('"', ArrayString, ItemStartIndex + 1) + 1) AS ItemEndIndex FROM (VALUES (1)) AS a(ItemStartIndex) WHERE CHARINDEX('"', ArrayString, ItemStartIndex + 1) > 0 ) AS JsonArrayItems ) SELECT Name, CASE WHEN EXISTS(SELECT 1 FROM JsonFields WHERE RowNum = j.RowNum) THEN (SELECT Value FROM JsonFields WHERE RowNum = j.RowNum) WHEN EXISTS(SELECT 1 FROM JsonArrays WHERE RowNum = j.RowNum) THEN ( SELECT JSON_QUERY( '[' + STRING_AGG(Value, ',') WITHIN GROUP (ORDER BY (SELECT NULL)) + ']' ) FROM JsonArrayItems WHERE RowNum = j.RowNum AND Name = j.Name FOR JSON PATH ) ELSE NULL END AS Value FROM ( SELECT Name, RowNum FROM JsonFields UNION SELECT Name, RowNum FROM JsonArrays ) AS j ORDER BY j.RowNum ``` 该函数的输入为一个JSON字符串,返回一个格,其包含JSON对象字段及JSON数组。 使用示例: ``` DECLARE @json NVARCHAR(MAX) = '{ "name": "John", "age": 30, "city": "New York", "hobbies": [ "reading", "swimming", "traveling" ], "address": { "street": "123 Main St", "city": "Los Angeles", "state": "CA" } }' SELECT * FROM ParseJsonWithoutOpenJson(@json) ``` 输出结果: ``` Name Value ----------- -------------------------------------------- name John age 30 city New York hobbies ["reading","swimming","traveling"] address {"street":"123 Main St","city":"Los Angeles","state":"CA"} ``` 注意:该函数的性能可能不如使用OPENJSON函数的解析方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值