我有一个像这样的存储过程
ALTER PROCEDURE [dbo].[GETMONITORING]
@namabarang varchar (max)
SET NOCOUNT ON;
DECLARE @nWhere varchar(4000)
SET @nwhere = ' where namabarang=''+@namabarang+'''
SELECT
tanggalpermohonan, k.namaunitkerja, l.namajenislayanan,
namabarang, kodebarang, nup, r.namaruangan, p.lokasi, masalah
FROM
permohonan p
JOIN
UnitKerja k on k.idUnitKerja = p.idUnitKerja
JOIN
JenisLayanan l on l.idJenisLayanan = p.JenisLayananID
JOIN
MasterRuangan r on r.KodeRuang = p.KodeRuang
PRINT @nwhere
end
我使用'ac'作为@namabarang
的参数来执行该存储过程,并且它会产生所有行。如果我在这样的查询中运行
select
tanggalpermohonan, k.namaunitkerja, l.namajenislayanan,
namabarang, kodebarang, nup, r.namaruangan, p.lokasi, masalah
from
permohonan p
join
UnitKerja k on k.idUnitKerja = p.idUnitKerja
join
JenisLayanan l on l.idJenisLayanan = p.JenisLayananID
join
MasterRuangan r on r.KodeRuang = p.KodeRuang
where
namabarang = 'ac'
我只想查询结果1行。如果我希望AC
作为@parameter
的存储过程只返回一行,我该怎么办?
谢谢
答案 0 :(得分:1)
修改您的程序,如以下样本进行平等搜索
alter procedure GetData(@parmeter varchar(5))
as
begin
declare @basequery varchar(max);
declare @where varchar(max);
declare @final varchar(max);
set @basequery='select * from doctest '
set @where='where docId = '+@parmeter
set @final=@basequery+@where
execute(@final)
end
答案 1 :(得分:0)
打印不会成为您查询的一部分,它只会打印到SSMS的消息选项卡或您的查询工具。它对状态更新很有用,而不是用于生成查询。
不要将varchar(max)用于参数类型。使它与namabarang字段的实际数据类型相同。如果您希望能够将多个值放入参数中,那么这将不起作用。
ALTER PROCEDURE [dbo].[GETMONITORING]
@namabarang varchar (max)
SET NOCOUNT ON;
SELECT
tanggalpermohonan, k.namaunitkerja, l.namajenislayanan,
namabarang, kodebarang, nup, r.namaruangan, p.lokasi, masalah
FROM
permohonan p
JOIN
UnitKerja k on k.idUnitKerja = p.idUnitKerja
JOIN
JenisLayanan l on l.idJenisLayanan = p.JenisLayananID
JOIN
MasterRuangan r on r.KodeRuang = p.KodeRuang
WHERE namabarang = @namabarang
端
不要这样做:
exec GETMONITORING 'ac'
具体说明架构,并始终使用命名参数,因为它会在有多个参数时帮助您,并且当代码更改时,
这样做:
exec dbo.GETMONITORING @namabarang = 'ac'
答案 2 :(得分:0)
试试这个:
ALTER PROCEDURE [dbo].[GETMONITORING]
@namabarang varchar (max)
AS
BEGIN
DECLARE @nWhere NVARCHAR(4000) = ' where namabarang = '''+@namabarang+'''';
DECLARE @sql NVARCHAR(MAX) = '
SELECT
tanggalpermohonan, k.namaunitkerja, l.namajenislayanan,
namabarang, kodebarang, nup, r.namaruangan, p.lokasi, masalah
FROM
permohonan p
JOIN
UnitKerja k on k.idUnitKerja = p.idUnitKerja
JOIN
JenisLayanan l on l.idJenisLayanan = p.JenisLayananID
JOIN
MasterRuangan r on r.KodeRuang = p.KodeRuang ' + @nWhere;
exec sp_executesql @sql
END
然后:
exec dbo.GETMONITORING @namabarang = 'ac'