Sql 在存储过程中传递参数时出错
注意动态SQL中@cols和@locid之间的区别 更换Sql 在存储过程中传递参数时出错,sql,sql-server,tsql,Sql,Sql Server,Tsql,注意动态SQL中@cols和@locid之间的区别 更换 alter procedure [dbo].[ParkingDeatailsReport] as begin DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX), @locid INTEGER select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Vtype)
alter procedure [dbo].[ParkingDeatailsReport]
as
begin
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX),
@locid INTEGER
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Vtype)
from VType_tbl
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
set @query = 'SELECT Date, ' + @cols + '
from
(
select v.Vtype, convert(date, dtime) as Date
from Transaction_tbl t
inner join VType_tbl v on t.vtid = v.vtid
where locid = ' + CAST(@locid as varchar(max)) + ') d
pivot
(
count(Vtype)
for Vtype in (' + @cols + ')
) p '
execute(@query)
end
与
where locid = @locid
注意:虽然这是一个快速解决方案,但请参阅RBarryYoung的答案,以了解动态SQL的最佳实践。注意动态SQL中@cols和@locid之间的区别 更换
alter procedure [dbo].[ParkingDeatailsReport]
as
begin
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX),
@locid INTEGER
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(Vtype)
from VType_tbl
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
set @query = 'SELECT Date, ' + @cols + '
from
(
select v.Vtype, convert(date, dtime) as Date
from Transaction_tbl t
inner join VType_tbl v on t.vtid = v.vtid
where locid = ' + CAST(@locid as varchar(max)) + ') d
pivot
(
count(Vtype)
for Vtype in (' + @cols + ')
) p '
execute(@query)
end
与
where locid = @locid
注意:虽然这是一个快速修复方法,但请参阅RBarryYoung的答案,以了解动态SQL的最佳实践。错误清楚地表明,您当前的SP代码不接受任何参数,您正在尝试将参数pas到SP。如果您想接受SP中的参数,语法为:
where locid = ' + CAST(@locid as varchar(max)) + '
因此,在您的情况下,SP可以更改为:
Create Procedure Procedure-name
(
Input parameters ,
Output Parameters (If required)
)
As
Begin
Sql statement used in the stored procedure
End
错误清楚地表明,您当前的SP代码不接受任何参数,并且您正在尝试将参数pas到SP。如果要接受SP中的参数,语法为:
where locid = ' + CAST(@locid as varchar(max)) + '
因此,在您的情况下,SP可以更改为:
Create Procedure Procedure-name
(
Input parameters ,
Output Parameters (If required)
)
As
Begin
Sql statement used in the stored procedure
End
我按您所说的编辑了存储过程,但在执行过程中仍然出现如下错误:过程ParkingDeatailsReport没有提供任何参数和参数。请编辑您的问题并添加您收到的错误消息以及您尝试的内容。我按您所说的编辑了存储过程,执行时仍然会出现如下错误:过程ParkingDeatailsReport没有参数,并且没有提供参数。请编辑您的问题,并添加您收到的错误消息,以及您尝试的内容。我没有收到u,,,,我重新编写了代码,无论您说什么,,,执行时仍然会出错用我的答案更改原始代码,然后告诉我您遇到了一些其他错误,这是不明智的做法,因此是否决票;)获取此错误:过程ParkingDeatailsReport没有参数,并且未提供参数。@user2432269,因为您移动了@locid的声明。在开始之前应该是正确的。我可以在一个过程中给出两个声明我没有得到你,,,,,我重新编写了我的代码,不管你说什么,,,在执行时仍然会出错用我的答案更改你的原始代码,然后告诉我你还有一些其他错误,这是不明智的,因此否决票;)获取此错误:过程ParkingDeatailsReport没有参数,并且未提供参数。@user2432269,因为您移动了@locid的声明。它应该就在开始之前。我可以在一个过程中给出两个声明