簡體   English   中英

SQL 動態查詢錯誤(列名對於不是列名的值無效)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM