SqlServer创建表,可能用到存储过程,大牛露个面,进来赐教啦!O(∩_∩)O哈哈~
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SqlServer创建表,可能用到存储过程,大牛露个面,进来赐教啦!O(∩_∩)O哈哈~相关的知识,希望对你有一定的参考价值。
create table Question --考题表,所有的考题都在这表里
(
QNo Nvarchar(20) not null,--考题编号(XZ0001、PD0001、JD0001、JS0001)//int identity(20140000,1),
Qclass Nvarchar(20) not null, --考题类型(选择、判断、简答、计算)//Qclass=N'女'
--CHECK(QClass=N'选择' or Qclass=N'判断')
Qdifficulty Nvarchar(5) null,--难度(难、中、易)
Qabout Nvarchar(10) null,--考察相关(变比、百分表、互感器。。。)
Qdegree int not null,--分值
Qdetail Nvarchar(256) not null,--考题详情(题目)
QoptionsA Nvarchar(100) null, --选项A,
QoptionsB Nvarchar(100) null, --选项B
QoptionsC Nvarchar(100) null, --选项C
QoptionsD Nvarchar(100) null, --选项D
Qanswer Nvarchar(500)--参考答案
primary key (QNo)
)
--主要问题如下:
1、对于主键Qno,如何实现前两位为字母由QClass确定,后四位为数字由0001+1递增;
2、对于QoptionA/B/C/D,如果QClass为‘选择’,那么QoptionA/B/C/D不为null,反之为null.
--先谢!
RIGHT('000'+convert(varchar,ROW_NUMBER() OVER(PARTITION BY a.Qclass ORDER BY a.Qno)+b.Qno),4),a.Qclass,a.Qdifficulty,a.Qabout,a.Qdegree,a.Qdetail,a.QoptionsA,a.QoptionsB,a.QoptionsC,a.QoptionsD,a.Qanswer
FROM INSERTED a
JOIN (
SELECT Qclass,CONVERT(INT,RIGHT(MAX(QNo),4))QNo FROM Question GROUP BY Qclass
)b ON a.Qclass=b.Qclass
end
ON Question
INSTEAD OF INSERT
AS
BEGIN
INSERT INTO Question(各列名)
SELECT (CASE WHEN Qclass=N'选择' THEN 'XZ'
WHEN Qclass=N'判断' THEN 'PD'
WHEN Qclass=N'简答' THEN 'JD'
WHEN Qclass=N'计算' THEN 'JS'
END)+
RIGHT('000'+ROW_NUMBER() OVER(PARTITION BY a.Qclass ORDER BY a.Qno)+b.Qno,4),a.其他列
FROM INSERTED a
JOIN (
SELECT Qclass,CONVERT(INT,RIGHT(MAX(QNo),4))QNo FROM Question GROUP BY Qclass
)b ON a.Qclass=b.Qclass
end
check约束,后两项自己补全
CHECK((Qclass=N'选择' AND QoptionsA IS NOT NULL AND QoptionsB IS NOT NULL)
OR (Qclass<>N'选择' AND QoptionsA IS NULL AND QoptionsB IS NULL)
INSERT时对于QoptionA/B/C/D的修改也是同样道理。追问
那些都忘的差不多了,我现在需要结果。能给个代码吗?谢谢!
追答CREATE TRIGGER TRG_QUESTION
ON Question
FOR INSERT
AS
DECLARE @QNO NVARCHAR2(20),@QCLASS NVARCHAR2(20),
@OPTIONA NVARCHAR2(100),@OPTIONB NVARCHAR2(100),
@OPTIONC NVARCHAR2(100),@OPTIOND NVARCHAR2(100)
SELECT @QCLASS=QCLASS,@QOPTIONA=QOPTIONA,@QOPTIONB=QOPTIONA,
@QOPTIONC=QOPTIONC,@QOPTIOND=QOPTIOND FROM INSERTED
....... ----这里自己补
GO
亲,你好!写个代码我看看好不好!谢谢了!
sqlserver 怎么看存储过程的上次执行时间
一般来说,最好记录日志(专门的日志表),日志中有datetime列在存储过程执行前,记录一下日志、存储过程执行完,记录一下日志。
这样就可以计算其执行的时间了,
并且还可以在执行过程中记录一些重要的信息。 参考技术A 打开企业管理器--控制台目录—sqlserver 组—管理--SQL server日志 参考技术B 打开企业管理器--控制台目录—sqlserver 组—管理--SQL server日志 参考技术C 在“跟踪” 工具中,有专门的 可以查看。 参考技术D 你有表记录它每次的执行时间吗?
以上是关于SqlServer创建表,可能用到存储过程,大牛露个面,进来赐教啦!O(∩_∩)O哈哈~的主要内容,如果未能解决你的问题,请参考以下文章