[英]SQL Dynamic Query Error ( Column name invalid for a value that isn't a column name )
動態查詢拋出錯誤,指出無效的列名“總部”。 不知道為什么會拋出那個錯誤。 如果我取出 With 塊末尾的 where 語句,它運行良好,所以我認為它在那里壞了。 請幫忙。 我已經嘗試過重新啟動所有內容並刷新緩存。 在我使用 " 而不是 ' 的地方看不到任何錯誤。
DECLARE @StartDate DATE = '10/25/2021';
DECLARE @EndDate DATE;
DECLARE @DynamicQuery AS NVARCHAR(MAX);
DECLARE @ColumnList AS NVARCHAR(MAX);
DECLARE @LocationNameFromApp AS VARCHAR(50);
DECLARE @SDstr as NVARCHAR(10);
DECLARE @EDstr as NVARCHAR(10);
Set @EndDate = DATEADD(DAY,13,@StartDate);
SET @SDstr = CONVERT(VARCHAR(10), @StartDate, 120);
SET @EDstr = CONVERT(VARCHAR(10), @EndDate, 120);
SET @LocationNameFromApp = 'Headquarters';
-- populate column list
WITH DateRange(DateData) AS
(
SELECT @StartDate as Date
UNION ALL
SELECT DATEADD(DAY,1,DateData)
FROM DateRange
WHERE DateData < @EndDate
)
SELECT @ColumnList = ISNULL(@ColumnList + ',', '')
+ QUOTENAME(FORMAT(DateData, 'MM/dd/yyyy'))
FROM DateRange
OPTION (MAXRECURSION 300);
set @DynamicQuery = '
WITH Schedule AS (
SELECT
P.PositionName,
S.ShiftName,
U.FirstName,
U.LastName,
R.RotationName,
D.FullDateUSA,
L.LocationName
FROM
dbo.factSchedule F
INNER JOIN dbo.Users U on F.UserID = U.UserID
INNER JOIN dbo.DimDate D on F.KeyDate = D.DateKey
INNER JOIN dbo.Positions P on F.PositionID = P.PositionID
INNER JOIN dbo.Shifts S on F.ShiftID = S.ShiftID
INNER JOIN dbo.Rotations R on F.RotationID = R.RotationID
INNER JOIN dbo.Locations L on F.LocationID = L.LocationID
WHERE LocationName='+@LocationNameFromApp+' AND FullDateUSA >= '+@SDstr+' AND FullDateUSA <= '+@EDstr+'
)
SELECT * INTO dbo.'+@LocationNameFromApp+'SchedDays
FROM Schedule
PIVOT (MAX(ShiftName) FOR FullDateUSA IN ('+@ColumnList+')) P
ALTER TABLE dbo.'+@LocationNameFromApp+'SchedDays ADD ID int identity(1,1) not null
ALTER TABLE dbo.'+@LocationNameFromApp+'SchedDays ADD CONSTRAINT '+@LocationNameFromApp+'pk_ID primary key(ID)
'
execute (@DynamicQuery)
;
我假設是因為您在這里將其設置為常量 -
SET @LocationNameFromApp = 'Headquarters';
動態查詢將其轉換為LocationName=Headquarters
而不是LocationName='Headquarters'
。
嘗試更改變量的設置,如下所示 -
SET @LocationNameFromApp = '''Headquarters''';
所以它將被轉換為LocationName='Headquarters'
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.