【发布时间】:2016-04-25 04:06:11
【问题描述】:
我想将以下查询设置为 Query2 varchar(max) 变量,但出现错误
Conversion Failed when converting the varchar value 'SELECT...
我想我可能遗漏了一些关于 + 或 / 的东西 不过我不确定。
Set @Query2 = 'SELECT tc.RequestID, cast(d2.CalendarYearNumber AS VARCHAR(4))' + 'P' + ' AS [Year],
CAST(SUM(HHIncomeBelow10k) AS FLOAT) / CAST(SUM(HHIncomeBelow10k + [HHIncome10k-15k] + [HHIncome15k-20k] + [HHIncome20k-25k] + [HHIncome25k-30k] + [HHIncome30k-35k] + [HHIncome35k-40k] + [HHIncome40k-45k] + [HHIncome45k-50k] + [HHIncome50k-60k] + [HHIncome60k-75k] + [HHIncome75k-100k] + [HHIncome100k-125k] + [HHIncome125k-150k] + [HHIncome150k-200k] + HHIncomeAbove200k) AS FLOAT)
AS [Income Less than $10,000P],
CAST(SUM([HHIncome10k-15k]) AS FLOAT) / CAST(SUM(HHIncomeBelow10k + [HHIncome10k-15k] + [HHIncome15k-20k] + [HHIncome20k-25k] + [HHIncome25k-30k] + [HHIncome30k-35k] + [HHIncome35k-40k] + [HHIncome40k-45k] + [HHIncome45k-50k] + [HHIncome50k-60k] + [HHIncome60k-75k] + [HHIncome75k-100k] + [HHIncome100k-125k] + [HHIncome125k-150k] + [HHIncome150k-200k] + HHIncomeAbove200k) AS FLOAT)
AS [Income $10,000 - $15,000P],
CAST(SUM([HHIncome15k-20k]) AS FLOAT) / CAST(SUM(HHIncomeBelow10k + [HHIncome10k-15k] + [HHIncome15k-20k] + [HHIncome20k-25k] + [HHIncome25k-30k] + [HHIncome30k-35k] + [HHIncome35k-40k] + [HHIncome40k-45k] + [HHIncome45k-50k] + [HHIncome50k-60k] + [HHIncome60k-75k] + [HHIncome75k-100k] + [HHIncome100k-125k] + [HHIncome125k-150k] + [HHIncome150k-200k] + HHIncomeAbove200k) AS FLOAT)
AS [Income $15,000 - $20,000P],
CAST(SUM([HHIncome20k-25k]) AS FLOAT) / CAST(SUM(HHIncomeBelow10k + [HHIncome10k-15k] + [HHIncome15k-20k] + [HHIncome20k-25k] + [HHIncome25k-30k] + [HHIncome30k-35k] + [HHIncome35k-40k] + [HHIncome40k-45k] + [HHIncome45k-50k] + [HHIncome50k-60k] + [HHIncome60k-75k] + [HHIncome75k-100k] + [HHIncome100k-125k] + [HHIncome125k-150k] + [HHIncome150k-200k] + HHIncomeAbove200k) AS FLOAT)
AS [Income $20,000 - $25,000P],
CAST(SUM([HHIncome25k-30k]) AS FLOAT) / CAST(SUM(HHIncomeBelow10k + [HHIncome10k-15k] + [HHIncome15k-20k] + [HHIncome20k-25k] + [HHIncome25k-30k] + [HHIncome30k-35k] + [HHIncome35k-40k] + [HHIncome40k-45k] + [HHIncome45k-50k] + [HHIncome50k-60k] + [HHIncome60k-75k] + [HHIncome75k-100k] + [HHIncome100k-125k] + [HHIncome125k-150k] + [HHIncome150k-200k] + HHIncomeAbove200k) AS FLOAT)
AS [Income $25,000 - $30,000P],
CAST(SUM([HHIncome30k-35k]) AS FLOAT) / CAST(SUM(HHIncomeBelow10k + [HHIncome10k-15k] + [HHIncome15k-20k] + [HHIncome20k-25k] + [HHIncome25k-30k] + [HHIncome30k-35k] + [HHIncome35k-40k] + [HHIncome40k-45k] + [HHIncome45k-50k] + [HHIncome50k-60k] + [HHIncome60k-75k] + [HHIncome75k-100k] + [HHIncome100k-125k] + [HHIncome125k-150k] + [HHIncome150k-200k] + HHIncomeAbove200k) AS FLOAT)
AS [Income $30,000 - $35,000P],
CAST(SUM([HHIncome35k-40k]) AS FLOAT) / CAST(SUM(HHIncomeBelow10k + [HHIncome10k-15k] + [HHIncome15k-20k] + [HHIncome20k-25k] + [HHIncome25k-30k] + [HHIncome30k-35k] + [HHIncome35k-40k] + [HHIncome40k-45k] + [HHIncome45k-50k] + [HHIncome50k-60k] + [HHIncome60k-75k] + [HHIncome75k-100k] + [HHIncome100k-125k] + [HHIncome125k-150k] + [HHIncome150k-200k] + HHIncomeAbove200k) AS FLOAT)
AS [Income $35,000 - $40,000P],
CAST(SUM([HHIncome40k-45k]) AS FLOAT) / CAST(SUM(HHIncomeBelow10k + [HHIncome10k-15k] + [HHIncome15k-20k] + [HHIncome20k-25k] + [HHIncome25k-30k] + [HHIncome30k-35k] + [HHIncome35k-40k] + [HHIncome40k-45k] + [HHIncome45k-50k] + [HHIncome50k-60k] + [HHIncome60k-75k] + [HHIncome75k-100k] + [HHIncome100k-125k] + [HHIncome125k-150k] + [HHIncome150k-200k] + HHIncomeAbove200k) AS FLOAT)
AS [Income $40,000 - $45,000P],
CAST(SUM([HHIncome45k-50k]) AS FLOAT) / CAST(SUM(HHIncomeBelow10k + [HHIncome10k-15k] + [HHIncome15k-20k] + [HHIncome20k-25k] + [HHIncome25k-30k] + [HHIncome30k-35k] + [HHIncome35k-40k] + [HHIncome40k-45k] + [HHIncome45k-50k] + [HHIncome50k-60k] + [HHIncome60k-75k] + [HHIncome75k-100k] + [HHIncome100k-125k] + [HHIncome125k-150k] + [HHIncome150k-200k] + HHIncomeAbove200k) AS FLOAT)
AS [Income $45,000 - $50,000P],
CAST(SUM([HHIncome50k-60k]) AS FLOAT) / CAST(SUM(HHIncomeBelow10k + [HHIncome10k-15k] + [HHIncome15k-20k] + [HHIncome20k-25k] + [HHIncome25k-30k] + [HHIncome30k-35k] + [HHIncome35k-40k] + [HHIncome40k-45k] + [HHIncome45k-50k] + [HHIncome50k-60k] + [HHIncome60k-75k] + [HHIncome75k-100k] + [HHIncome100k-125k] + [HHIncome125k-150k] + [HHIncome150k-200k] + HHIncomeAbove200k) AS FLOAT)
AS [Income $50,000 - $60,000P],
CAST(SUM([HHIncome60k-75k]) AS FLOAT) / CAST(SUM(HHIncomeBelow10k + [HHIncome10k-15k] + [HHIncome15k-20k] + [HHIncome20k-25k] + [HHIncome25k-30k] + [HHIncome30k-35k] + [HHIncome35k-40k] + [HHIncome40k-45k] + [HHIncome45k-50k] + [HHIncome50k-60k] + [HHIncome60k-75k] + [HHIncome75k-100k] + [HHIncome100k-125k] + [HHIncome125k-150k] + [HHIncome150k-200k] + HHIncomeAbove200k) AS FLOAT)
AS [Income $60,000 - $75,000P],
CAST(SUM([HHIncome75k-100k]) AS FLOAT) / CAST(SUM(HHIncomeBelow10k + [HHIncome10k-15k] + [HHIncome15k-20k] + [HHIncome20k-25k] + [HHIncome25k-30k] + [HHIncome30k-35k] + [HHIncome35k-40k] + [HHIncome40k-45k] + [HHIncome45k-50k] + [HHIncome50k-60k] + [HHIncome60k-75k] + [HHIncome75k-100k] + [HHIncome100k-125k] + [HHIncome125k-150k] + [HHIncome150k-200k] + HHIncomeAbove200k) AS FLOAT)
AS [Income $75,000 - $100,000P],
CAST(SUM([HHIncome100k-125k]) AS FLOAT) / CAST(SUM(HHIncomeBelow10k + [HHIncome10k-15k] + [HHIncome15k-20k] + [HHIncome20k-25k] + [HHIncome25k-30k] + [HHIncome30k-35k] + [HHIncome35k-40k] + [HHIncome40k-45k] + [HHIncome45k-50k] + [HHIncome50k-60k] + [HHIncome60k-75k] + [HHIncome75k-100k] + [HHIncome100k-125k] + [HHIncome125k-150k] + [HHIncome150k-200k] + HHIncomeAbove200k) AS FLOAT)
AS [Income $100,000 - $125,000P],
CAST(SUM([HHIncome125k-150k]) AS FLOAT) / CAST(SUM(HHIncomeBelow10k + [HHIncome10k-15k] + [HHIncome15k-20k] + [HHIncome20k-25k] + [HHIncome25k-30k] + [HHIncome30k-35k] + [HHIncome35k-40k] + [HHIncome40k-45k] + [HHIncome45k-50k] + [HHIncome50k-60k] + [HHIncome60k-75k] + [HHIncome75k-100k] + [HHIncome100k-125k] + [HHIncome125k-150k] + [HHIncome150k-200k] + HHIncomeAbove200k) AS FLOAT)
AS [Income $125,000 - $150,000P],
CAST(SUM([HHIncome150k-200k]) AS FLOAT) / CAST(SUM(HHIncomeBelow10k + [HHIncome10k-15k] + [HHIncome15k-20k] + [HHIncome20k-25k] + [HHIncome25k-30k] + [HHIncome30k-35k] + [HHIncome35k-40k] + [HHIncome40k-45k] + [HHIncome45k-50k] + [HHIncome50k-60k] + [HHIncome60k-75k] + [HHIncome75k-100k] + [HHIncome100k-125k] + [HHIncome125k-150k] + [HHIncome150k-200k] + HHIncomeAbove200k) AS FLOAT)
AS [Income $150,000 - $200,000P],
CAST(SUM(HHIncomeAbove200k) AS FLOAT) / CAST(SUM(HHIncomeBelow10k + [HHIncome10k-15k] + [HHIncome15k-20k] + [HHIncome20k-25k] + [HHIncome25k-30k] + [HHIncome30k-35k] + [HHIncome35k-40k] + [HHIncome40k-45k] + [HHIncome45k-50k] + [HHIncome50k-60k] + [HHIncome60k-75k] + [HHIncome75k-100k] + [HHIncome100k-125k] + [HHIncome125k-150k] + [HHIncome150k-200k] + HHIncomeAbove200k) AS FLOAT)
AS [Income $200,000 or moreP],
CAST(SUM(HHIncomeBelow10k + [HHIncome10k-15k] + [HHIncome15k-20k] + [HHIncome20k-25k]
+ [HHIncome25k-30k] + [HHIncome30k-35k] + [HHIncome35k-40k] + [HHIncome40k-45k]
+ [HHIncome45k-50k] + [HHIncome50k-60k] + [HHIncome60k-75k] + [HHIncome75k-100k]
+ [HHIncome100k-125k] + [HHIncome125k-150k] + [HHIncome150k-200k] + HHIncomeAbove200k) AS FLOAT) / CAST(SUM(HHIncomeBelow10k + [HHIncome10k-15k] + [HHIncome15k-20k] + [HHIncome20k-25k] + [HHIncome25k-30k] + [HHIncome30k-35k] + [HHIncome35k-40k] + [HHIncome40k-45k] + [HHIncome45k-50k] + [HHIncome50k-60k] + [HHIncome60k-75k] + [HHIncome75k-100k] + [HHIncome100k-125k] + [HHIncome125k-150k] + [HHIncome150k-200k] + HHIncomeAbove200k) AS FLOAT)
AS TotalP
INTO #tmpHHPct
FROM Fact.DemographicBlockGroup d
INNER JOIN Report.RequestMSTGeoID_CBG tc ON d.GeographyID = tc.GEOID
INNER JOIN dim.Date d2 ON d.DateSK = d2.DateSK
WHERE CurrentRecord = 1
AND tc.RequestID = ' + @RequestID + '
GROUP BY tc.RequestID, d2.CalendarYearNumber'
【问题讨论】:
-
变量@RequestID的数据类型是什么?
-
能否请您提供sqlfiddle.com 或至少一些带有示例数据的临时表?
-
为什么这甚至需要动态SQL?为什么要附加输入参数而不是使用适当的强类型参数来保护自己免受 SQL 注入?无论如何,答案很简单 -
@RequestID是一个整数,因此 SQL Server 试图将big string添加到该值。如果你想以一种可怕的、保持你的简历新鲜的方式继续这样做,你需要将变量转换为一个字符串。+ CONVERT(VARCHAR(11), @RequestID) +. -
(你可能还需要
+' + ''P'''+而不是+'P'+。)
标签: sql sql-server sql-server-2008 dynamic