sqlserver创建表,可能用到存储过程,大牛露个面,进来赐教啦!o(∩_∩)o哈哈~

author author     2023-04-28     455

关键词:

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
 

CREATE TRIGGER tr_Question_ins
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)

参考技术A 这个最好使用TRIGER,INSERT时触发,自动编号。
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

参考技术B 可以加触发器来实现。或者写个存储来执行插入操作。看心情吧。追问

亲,你好!写个代码我看看好不好!谢谢了!

sqlserver存储过程中使用表值作为输入参数示例

...考技术A在2008之前如果我们想要将表作为输入参数传递给SQLServer存储过程使比较困难的,可能需要很多的逻辑处理将这些表数据作为字符串或者XML传入。在2008中提供了表值参数。使用表值参数,可以不必创建临时表或许多参数,... 查看详情

sqlserver2008关于存储过程中的临时表。

在存储过程中如果我使用selecta,b,cinto#abcfromabc创建临时表在存储过程后面写select或者drop语句操作临时表都没有问题。现在我在存储过程中把sql语句拼接好后放在变量中set@sql='selecta,b,cinto#abcfromabc'然后使用exec(@sql)执行后再在... 查看详情

用sql创建存储过程的题目(sqlserver2000下)

...'下面得到的结果却是空的关于delphi调用存储过程,用sqlserver自带的“创建存储过程向导”给表login建立一个更新存储过程。悬赏分:100|离问题结束还有12天18小时|提问者:风风我依|检举存储过程代码如下:已知表login有passname... 查看详情

sqlserver--你可能不知道的技术细节:存储过程参数传递的影响

前言   很多人认为数据库其实很简单,也没什么大深入的细节去研究,但是真正的一些细节问题决定着你的是否是专家。  本文主要讲述一下存储过程参数传递的一些小细节,很多人知道参数嗅探,本例也可以理解... 查看详情

sqlserver中怎样创建保存数据的存储过程

在SQLServer中,可以使用两种方法创建存储过程:利用SQLServer管理平台创建存储过程。使用Transact-SQL语句中的CREATEPROCEDURE命令创建存储过程。创建存储过程时,需要确定存储过程的几个组成部分:①所有的输入参数以及传给调用者... 查看详情

sqlserver存储过程详解

转自:https://blog.csdn.net/younghaiqing/article/details/62884658一.什么是存储过程系统存储过程是系统创建的存储过程,目的在于能够方便的从系统表中查询信息或完成与更新数据库表相关的管理任务或其他的系统管理任务。系统存储过程... 查看详情

sqlserver实现多个过程同时输出

...来调用多个过程,并将结果输出到一个结果表中。3.使用SQLServerAgent:可以使用SQLServerAgent来调度多个过程,并将结果输出到一个结果表中。 查看详情

sqlserver存储过程

...划12012-2-24表T_Plan是子表,使用存储过程根据表T_CPlan生成SqlServer存储过程该怎么写参考技术AcreateprocedureprCreateSubPlanasbegindeclare@idint,@intCycleint,@planNamevarchar(100),@createTimesmalldatetime,@cycleTimeintselect@id=min(t_cplan_id)fromt_cplanwhile(@idisnotnull)b... 查看详情

怎么查询sqlserver中一个表的存储过程?

...过程名\\x0d\\x0asp_helptext视图名\\x0d\\x0asp_help表名\\x0d\\x0a在sqlserver语句离执行就可以看到\\x0d\\x0a还可以找到该数据库-可编译性-存储过程-找到存储过程名称-右击-修改\\x0d\\x0a就可以查看了 查看详情

sqlserver里存储过程怎么调用存储过程

sqlserver里调用存储过程的具体操作步骤如下:1、打开SQLServerManagment管理工具,新建一个表。2、然后在表中插入一些样例数据。3、接下来在SQLServerManagment中右键单击可编程性,选择新建存储过程。4、然后在SQL编写界面中编写SQL... 查看详情

临时表是线程安全的吗?

...【发布时间】:2010-10-0218:57:18【问题描述】:我使用的是SQLServer2000,它的许多存储过程都广泛使用临时表。数据库流量很大,我担心创建和删除临时表的线程安全性。假设我有一个创建一些临时表的存储过程,它甚至可以将临... 查看详情

如何创建一个以表名作为输入的简单存储过程

...【发布时间】:2018-05-0215:59:08【问题描述】:我正在使用SQLServer2017,我想创建一个使用单个表名作为输入变量的存储过程。我想要该过程做的就是以各种方式更新该表。这个项目一年做两次,列总是一样的,所以我想把这个当... 查看详情

mysql为四个表创建储存过程或者储存函数

...DECLARE@ttable(aint,bint,cint)INSERTINTO@t(a,b,c)EXECsp1SELECT*FROM@t使用SQLSERVER存储过程可以很大的提高程序运行速度,简化编程维护难度,现已得到广泛应用。创建存储过程  和数据表一样,在使用之前需要创建存储过程,它的简明语法是... 查看详情

sqlserver异常捕获(代码片段)

在SQLserver数据库中,如果有很多存储过程的时候,我们会使用动态SQL进行存储过程调用存储过程,这时候,很可能在某个环节就出错了,但是出错了我们很难去跟踪到出错的存储过程,此时我们就可以使用异常处理,通过日志表... 查看详情

在mysql中如何创建一个带输出参数为一个表类型的存储过程

...DECLARE@ttable(aint,bint,cint)INSERTINTO@t(a,b,c)EXECsp1SELECT*FROM@t使用SQLSERVER存储过程可以很大的提高程序运行速度,简化编程维护难度,现已得到广泛应用。创建存储过程和数据表一样,在使用之前需要创建存储过程,它的简明语法是:引... 查看详情

慢速存储过程 - SQL Server

】慢速存储过程-SQLServer【英文标题】:Slowstoredprocedure-SQLServer【发布时间】:2014-05-1013:03:10【问题描述】:所以我创建了一个存储过程以在我的VB.NET程序中使用。这将检查是否存在多个表,然后创建相关表并使用数据库中的其他... 查看详情

SQL Server 存储过程创建临时表并插入值

】SQLServer存储过程创建临时表并插入值【英文标题】:SQLServerstoredprocedurecreatingtemptableandinsertingvalue【发布时间】:2013-01-1508:52:04【问题描述】:我正在尝试从不同的表中选择值并将其插入到临时表中。我需要临时表中的标识字... 查看详情

查询某个表被那些存储过程用到

--sql2008查询某个表被那些存储过程用到selectdistinctobject_name(id)fromsyscommentswhereidin(selectobject_idfromsys.objectswheretype=‘P‘)and UPPER(text)like‘%YN-C-1803%‘orderbyobject_name(id)/*typechar(2)对象类型。可以 查看详情