Sql server 执行存储过程时显示多部分标识符错误
我有这样一个存储过程:Sql server 执行存储过程时显示多部分标识符错误,sql-server,Sql Server,我有这样一个存储过程: ALTER PROCEDURE [dbo].[ParkingDeatailsReportnew] @startdate NVARCHAR(100), @enddate NVARCHAR(100)AS BEGINDECLARE @cols AS NVARCHAR(MAX) , @query AS NVARCHAR(MAX) SELECT @cols = STUFF(( SELECT DISTINCT ',' + QUOTENAME(Vtype) FROM
ALTER PROCEDURE [dbo].[ParkingDeatailsReportnew]
@startdate NVARCHAR(100),
@enddate NVARCHAR(100)AS BEGINDECLARE @cols AS NVARCHAR(MAX) , @query AS NVARCHAR(MAX)
SELECT @cols = STUFF(( SELECT DISTINCT ',' + QUOTENAME(Vtype)
FROM dbo.VType_tbl FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
SET @query =
'SELECT LocName,Date, ' + @cols + '
from (
select l.LocName,v.Vtype, convert(date, dtime) as Date
from Transaction_tbl t
join VType_tbl v on t.vtid = v.vtid
where dtime between ''' + @startdate + ''' and ''' + @enddate + '''
and locid IN (SELECT l.Locid FROM dbo.Location_tbl l)
) d pivot ( count(Vtype) for Vtype in (' + @cols + ') ) p '
EXEC sys.sp_executesql @query
END
执行时,我遇到如下错误:
ALTER PROCEDURE [dbo].[ParkingDeatailsReportnew]
@startdate NVARCHAR(100),
@enddate NVARCHAR(100)AS BEGINDECLARE @cols AS NVARCHAR(MAX) , @query AS NVARCHAR(MAX)
SELECT @cols = STUFF(( SELECT DISTINCT ',' + QUOTENAME(Vtype)
FROM dbo.VType_tbl FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
SET @query =
'SELECT LocName,Date, ' + @cols + '
from (
select l.LocName,v.Vtype, convert(date, dtime) as Date
from Transaction_tbl t
join VType_tbl v on t.vtid = v.vtid
where dtime between ''' + @startdate + ''' and ''' + @enddate + '''
and locid IN (SELECT l.Locid FROM dbo.Location_tbl l)
) d pivot ( count(Vtype) for Vtype in (' + @cols + ') ) p '
EXEC sys.sp_executesql @query
END
无法绑定多部分标识符l.LocName
如何解决此问题?非常简单。外部查询没有从lL表中选择任何内容。你只在和locid中使用它。。。子查询。您不能在父查询中使用该子查询中的任何字段,但“一个l.locid”字段除外,并且只能在in。。。比较。要获取locname,而不是使用子查询,请在联接中使用表名。以下是示例:
ALTER PROCEDURE [dbo].[ParkingDeatailsReportnew]
@startdate NVARCHAR(100),
@enddate NVARCHAR(100)AS BEGINDECLARE @cols AS NVARCHAR(MAX) , @query AS NVARCHAR(MAX)
SELECT @cols = STUFF(( SELECT DISTINCT ',' + QUOTENAME(Vtype)
FROM dbo.VType_tbl FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
SET @query =
'SELECT LocName,Date, ' + @cols + '
from (
select l.LocName,v.Vtype, convert(date, dtime) as Date
from Transaction_tbl t
join VType_tbl v on t.vtid = v.vtid
join dbo.Location_tbl l on t.locid=l.Locid
where dtime between ''' + @startdate + ''' and ''' + @enddate + '''
) d pivot ( count(Vtype) for Vtype in (' + @cols + ') ) p '
EXEC sys.sp_executesql @query
END
在这里,我删除了子查询,并将Location\u tbl与Transaction\u tbl on LocId列连接起来。sir,,如何重新编写此查询我希望以升序获取locname。因此,我必须按以下方式给出order BY的位置:“+@startdate+”和“+enddate+”之间的dtime orderby l.locname但获取错误:order BY子句在视图、内联函数和派生表中无效