sql-server - 如何使用具有默认值的多个输入创建存储过程?
问题描述
我试图创建一个存储过程,它采用两个值,一个开始行值,一个结束行值。默认的开始应该是从选择视图返回的行的计数,结束是从开始的 60 个值。我遇到的问题是在没有传递参数的情况下使用参数声明这两个值,并进一步使用这些值。
我试过使用声明但没有运气。
CREATE PROCEDURE [dbo].[getRecords]
(@StartLoc INT = (SELECT COUNT(*) FROM [dbo].[dashboardview]),
@EndLoc INT = @StartLoc - 60)
AS
BEGIN
SET NOCOUNT ON;
SELECT
o.ID, o.Name, o.DateRan, s.Name AS Job, o.Start, o.[End],
o.Status, o.Logs
FROM
dbo.output AS o
LEFT OUTER JOIN
dbo.jobs AS j ON o.Job = j.ID
LEFT OUTER JOIN
dbo.scripts AS s ON j.Script = s.ID
WHERE
(o.DateRan < GETDATE())
AND (ROW_NUMBER() >= @StartLoc And ROW_NUMBER()<= @EndLoc)
ORDER BY
o.ID
END
我的目标是返回指定范围之间的记录数。
解决方案
将默认值设置为 NULL,然后检查以设置值是否为 NULL:
CREATE PROCEDURE [dbo].[getRecords]
@StartLoc INT = NULL,
@EndLoc INT = NULL
AS
BEGIN
SET NOCOUNT ON;
IF @StartLoc IS NULL
SET @StartLoc = (SELECT COUNT(*) FROM [dbo].[dashboardview]);
IF @EndLoc IS NULL
SET @EndLoc = @StartLoc - 60;
...
推荐阅读
- python - 如何解决在 Ubuntu 18.04 中安装 PyObjC 的错误
- python-3.x - 如何在 matplotlib 中将 x 和 y 轴上的默认 log_scale 从 1e+1 更改为 10^1
- c# - 如何使用一个射线投射并击中多个游戏对象?
- python - 如何隔离多索引数组中的特征
- regex - 复合正则表达式删除python中特殊字符和一组可能的后续字符之间的子字符串
- android - Android Studio 我如何在所有屏幕上显示图像大小
- amazon-s3 - 版本控制如何在 Amazon Cloudfront 上工作?
- angular - 使用 trackBy 仅在 ngFor 中对象的特定属性更改时渲染 DOM
- c++ - 宽度,高度和线条大小之间的AVFrame混淆
- image - PyTorch:将多条记录包装在一个文件中?