Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在存储过程中传递参数时出错_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 在存储过程中传递参数时出错

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)

注意动态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的最佳实践。

注意动态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的声明。它应该就在开始之前。我可以在一个过程中给出两个声明