使用SSMS创建的存储过程模板
-- ================================================
-- Template generated from Template Explorer using:
-- Create Procedure (New Menu).SQL
--
-- Use the Specify Values for Template Parameters
-- command (Ctrl-Shift-M) to fill in the parameter
-- values below.
--
-- This block of comments will not be included in
-- the definition of the procedure.
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:
-- Create date:
-- Description:
-- =============================================
CREATE PROCEDURE -- 设置存储过程的名称
-- Add the parameters for the stored procedure here 以下添加存储过程的变量
<@Param1, sysname, @p1> = ,
<@Param2, sysname, @p2> =
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON; --- 关闭计数,提高执行效率
-- Insert statements for procedure here
SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
END
GO
写个小案例,设计一个小表tUser,存储了下面信息
FID | FName |
---|---|
1 | A |
2 | B |
3 | C |
CREATE PROCEDURE QueryName
@ID int = 1, --- 输入参数 int类型,默认数值是1
@Name NVARCHAR(255) out --- 输出参数,字符串(类似编程语言中引用)
AS
BEGIN
SET NOCOUNT ON;
-- 函数执行体
SELECT [FID],[FName] FROM [dbo].[tUser] WHERE FID = @ID
return 1
END
GO
执行存储过程语句是
DECLARE @return_value int,
@Name nvarchar(255)
EXEC @return_value = [dbo].[QueryName]
@ID = 1,
@Name = @Name OUTPUT
SELECT @Name as N'@Name'
SELECT 'Return Value' = @return_value
执行结果是
截止目前为止,了解了一个什么叫存储过程,和简单函数的框架的编写
--- DECLARE @+变量名称 变量类型
-- 注意变量一定要使用 @开始
DECLARE @Value INT
SET @Value=1 - - 赋值 方法一
SELECT @Value =1 -- 赋值方法二
使用Table 变量存储数组;存储变量后,调用方式和表操作一样;数值不大的时候 尽可能使用表变量。数值比较大的时候 使用临时表
DECLARE @TmpRes TABLE (
[FName] [varchar](256) NULL
,[FID] int
)
EXEC
EXEC sp_executesql
DECLARE @SQLQueryMaxMin NVARCHAR(2000)
DECLARE @MaxValue NVARCHAR(255)
DECLARE @MinValue NVARCHAR(255)
SET @SQLQueryMaxMin = 'SELECT @MaxValue= MAX([FID]),@MinValue=MIN([FID]) FROM '+@ParamTableName
EXEC sp_executesql @SQLQueryMaxMin,N'@MaxValue VARCHAR(255) output ,@MinValue VARCHAR(255) output'
,@MaxValue output
,@MinValue output
使用TOP 1循环
WHILE EXISTS(SELECT [FID] FROM @TmpRes)
BEGIN
SELECT TOP(1)
@[FID]=[[FID]]
FROM @TmpRes
--- 执行相关动作
DELECT FROM @TmpRes WHERE FID=@FID
还可以使用 游程、设置只检索一行的方式执行