La syntaxe de base des procédures stockées SQL Server

Cas numéro un,

ALTER PROCEDURE [dbo].[pro_Purchase_hdy]
   @departmentname nvarchar(200),
	 @StartDate datetime,
   @EndDate datetime
AS
BEGIN
  set nocount on;
  DECLARE @Parm NVARCHAR(MAX) = N'',
          @sqlcommand NVARCHAR(MAX) = N''
	 SET @sqlcommand = 'SELECT a.sqrq,hr.lastname,hd.departmentname,a.wsmc,a.lcbh,b.kpfqc,b.fph,b.bhsje,b.sl,b.se,b.jshj FROM formtable_main_495 a, formtable_main_495_dt1 b,workflow_requestbase c, HrmResource hr,HrmDepartment hd WHERE a.id=b.mainid AND a.requestId=c.requestId and a.sqr=hr.id and a.sqbm=hd.id and c.status=''归档'''
	 
	 IF(@departmentname IS NOT NULL and @departmentname!='')
      SET @sqlcommand += ' AND departmentname like ''%'+@departmentname+'%'' order by a.sqrq desc'
	 IF(@StartDate IS NOT NULL and @StartDate!='')
      SET @sqlcommand += ' AND a.sqrq>=@StartDate'
	 IF(@EndDate IS NOT NULL and @EndDate!='')
      SET @sqlcommand += ' AND a.sqrq<=@EndDate'
	 IF(@departmentname ='' and @StartDate='' and @EndDate='')
      SET @sqlcommand += ' order by a.sqrq desc'
     
			
	 SET @Parm= '@departmentname varchar(50),
									@StartDate datetime,
									@EndDate datetime'
   PRINT @sqlcommand
	 
	 EXEC sp_executesql @sqlcommand,@Parm,
       @departmentname     =  @departmentname,
       @StartDate                =  @StartDate,
       @EndDate =  @EndDate 

END

Cas deux,

ALTER PROCEDURE [dbo].[pro_htdq_hdy]
   @lastname nvarchar(200),
	 @departmentname nvarchar(200)
AS
BEGIN
	if ( @lastname='' and @departmentname='') 
begin

	SELECT field7 lastname,departmentmark departmentname,enddate as enddate,field53 field53,field52 field52,field42,field43,field55,field54,field44,field45,field57,field56,field46,field47,field59,field58,field48,field49,field61,field60,field50,field51,(select DATEDIFF(DAY,(SELECT DATENAME(year,GETDATE())+'-'+ DATENAME(MONTH,GETDATE())+'-'+ DATENAME(DAY,GETDATE())),enddate)) as data FROM cus_fielddata cf,HrmResource hr,HrmDepartment h where cf.id=hr.id and h.id=hr.departmentid and cf.field7<>'' and field29=0  ORDER BY data 
	end

else 
begin
 SELECT field7 lastname,departmentmark departmentname,enddate as enddate,field53 field53,field52 field52,field42,field43,field55,field54,field44,field45,field57,field56,field46,field47,field59,field58,field48,field49,field61,field60,field50,field51,(select DATEDIFF(DAY,(SELECT DATENAME(year,GETDATE())+'-'+ DATENAME(MONTH,GETDATE())+'-'+ DATENAME(DAY,GETDATE())),enddate)) as data FROM cus_fielddata cf,HrmResource hr,HrmDepartment h where 
 cf.id=hr.id and h.id=hr.departmentid and cf.field7<>'' and field29=0 
 and lastname= case when @lastname<>'' then @lastname else field7 end 
 and  departmentname= case when @departmentname<>'' then @departmentname else departmentname end 
 ORDER BY data 

end
END

Qu'est-ce qu'une procédure stockée?

Une procédure de procédure stockée Procédure est un ensemble d'instructions SQL permettant d'exécuter une fonction spécifique, qui est compilée et stockée dans la base de données. L'utilisateur l'exécute en spécifiant le nom de la procédure stockée et en donnant des paramètres.

Étant donné que la procédure stockée est compilée sur le serveur de base de données et stockée dans la base de données lors de sa création, la procédure stockée s'exécute plus rapidement qu'un seul bloc d'instructions SQL. Dans le même temps, étant donné que seuls le nom de la procédure stockée et les informations de paramètres nécessaires sont fournis lors de l'appel, cela peut également réduire dans une certaine mesure le trafic réseau et la simple charge réseau.

Syntaxe de création de procédure stockée

create proc | procedure pro_name
    [{@参数数据类型} [=默认值] [output],
     {@参数数据类型} [=默认值] [output],
     ....
    ]
as
    SQL_statements

Exemple d'opération

Créez d'abord deux tables

Table Student Table
Insérez la description de l'image ici
Course
Insérez la description de l'image ici
où F_StuId dans la table Course est le F_ID de la table Student est une association de clé étrangère

Ajoutez des données de test et pratiquez la syntaxe SQL en passant

DECLARE @i INT, @F_Name VARCHAR(50), @F_Age INT, @F_Sex VARCHAR(2), @F_Hobby VARCHAR(50), @ranNum INT
SET @i = 0 
SET @F_Name = '小明' 
SET @F_Age = 0 
WHILE @i < 100
BEGIN
	SET @ranNum = RAND() * 4	--生成一个0-3的随机数
	IF @ranNum = 0
	BEGIN
		SET @F_Sex = '男'
		SET @F_Hobby = '篮球'
	END
	ELSE IF @ranNum = 1
	BEGIN
		SET @F_Sex = '男'
		SET @F_Hobby = '足球'
	END
	ELSE IF @ranNum = 2
	BEGIN
		SET @F_Sex = '女'
		SET @F_Hobby = '刺绣'
	END
	ELSE
	BEGIN
		SET @F_Sex = '女'
		SET @F_Hobby = '跳绳'
	END
	INSERT INTO Student (F_Name, F_Age, F_Sex, F_Hobby) VALUES (@F_Name + CONVERT(VARCHAR(3), @i), @F_Age + @i, @F_Sex, @F_Hobby)
	SET @i = @i + 1
END
GO
DECLARE @i INT, @F_StuId INT, @F_Course VARCHAR(50), @F_Score INT, @ranNum INT
SET @i = 0
SET @F_StuId = 0
SET @F_Course = '语文'
SET @F_Score = 0
WHILE @i < 100
BEGIN
	SET @ranNum = RAND() * 3	
	IF @ranNum = 0
	BEGIN
		SET @F_Course = '语文'
	END
	ELSE IF @ranNum = 1
	BEGIN
		SET @F_Course = '数学'
	END
	ELSE
	BEGIN
		SET @F_Course = '英语'
	END
	INSERT INTO Course (F_StuId, F_Course, F_Score) VALUES (@F_StuId + @i, @F_Course, @F_Score + @i)
	SET @i = @i + 1
END

Ensuite, nous créons une procédure stockée sans paramètres selon la syntaxe de la procédure stockée

create proc proc_get_student
as
select * from Student

Après la création, nous pouvons trouver notre procédure stockée nouvellement créée dans la programmabilité,
Insérez la description de l'image ici
puis exécuter cette procédure stockée

exec proc_get_student

Résultats de la
Insérez la description de l'image ici

Ensuite, nous allons créer une procédure stockée avec des paramètres

create proc proc_find_stu(@startId int, @endId int)
as
select * from Student where F_ID between @startId and @endId

Exécuter une procédure stockée (obtenir les informations sur l'étudiant avec l'ID 10-20)

exec proc_find_stu 10,20

Résultats de la
Insérez la description de l'image ici

Ensuite, j'utilise une procédure stockée pour terminer la requête de table + l'affichage de la pagination

create proc proc_page(@currPage int, @pageSize int, @keyWord varchar(50))
as
select a.F_ID, a.F_Name, a.F_Sex, b.F_Course, b.F_Score from Student a left join Course b on a.F_ID = b.F_StuId
where [F_Name] like '%' + @keyWord + '%'
order by a.F_ID
offset ((@currPage - 1) * @pageSize) rows
fetch next @pageSize rows only

Exécuter la procédure stockée

exec proc_page 1, 10, '0'

Résultats de la
Insérez la description de l'image ici

Si nécessaire, veuillez contacter WeChat: hdyi1997 En même temps, expliquez votre intention et progressez ensemble! ! !

Je suppose que tu aimes

Origine blog.csdn.net/Y_6155/article/details/105858968
conseillé
Classement