【发布时间】:2017-09-27 19:56:52
【问题描述】:
处理将结果存储在临时表中并希望转换为 CTE 的存储过程。
代码:
DECLARE @SQL nVARCHAR(max)
SET @SQL = '
;with CTE_RESULT
(
CAMP_ABBR,
ORIG_CALL_DATE,
DONOR_ID,
ACCOUNT_NUMBER_100,
COMPANY_NAME_100,
FIRST_NAME,
LAST_NAME,
PHONE,
STREET1,
STREET2,
STATE,
CITY,
ZIP_CODE,
WAVE_NAME,
EMAIL,
ORIGINAL_EMAIL,
CODE1,
DISPOSITION_CODE,
DESCRIPTION
)AS
(
SELECT CAMP_ABBR,
CONVERT(VARCHAR,ORIG_CALL_DATE,101),
DONOR_ID,
ACCOUNT_NUMBER_100 AS ACCOUNT_ID,
COMPANY_NAME_100,
FIRST_NAME,
LAST_NAME,
TEL_AREA_CODE + TEL_PREFIX + TEL_ROOT AS PHONE,
STREET1,
STREET2,
STATE,
CITY,
ZIP_CODE,
WAVE_NAME,
EMAIL,
ORIGINAL_EMAIL,
CODE1,
R.DISPOSITION_CODE,
D.DESCRIPTION
FROM placeholder1 t1
WHERE COLUMN IN(''01'',''02''))
'
EXEC @SQL
返回以下错误:
消息 203,第 16 级,状态 2,第 114 行
名称 ' ;with CTE_RESULT (CAMP_ABBR, ORIG_CALL_DATE, DONOR_ID, ACCOUNT_NUMBER_100, COMPANY_NAME_100, FIRST_NAME, LAST_NAME, PHONE, STREET1, STREET2, STATE, CITY, ZIP_CODE, WAVE_NAME, EMAIL, ORIGINAL_EMAIL, CODE1, DISPOSITION_CODE, DESCRIPTION) AS( SELECT CAMP_ABBR, CONVERT(VARCHAR,ORIG_CALL_DATE,101), DONOR_ID, ACCOUNT_NUMBER_100 作为 ACCOUNT_ID,COMPANY_NAME_100,FIRST_NAME, LAST_NAME,TEL_AREA_CODE + TEL_PREFIX + TEL_ROOT 作为电话, STREET1, STREET2, STATE, CITY, ZIP_CODE, WAVE_NAME, EMAIL、ORIGINAL_EMAIL、CODE1、DISPOSITIO'
不是有效的标识符。
看起来它已达到局部变量的 varchar 限制,但我不知道原因是什么。
【问题讨论】:
-
您的 select 子句中有“R.DISPOSITION_CODE”和“D.DESCRIPTION”,但没有表别名为“r”或“d”
-
从您发布的内容来看,首先没有理由使用动态 sql。这只会让事情变得更复杂。
-
Greenspark 他们是别名只是不是所有的代码都在这里代码在它自己的 CTE 之外工作我正在这样做所以我知道怎么做。
-
@CMO79 你的代码有很多错误。
-
你已经定义了 CTE,但是你还没有从中选择任何东西.. 你基本上做了
with cte as (select a from table).. 你需要像with cte as (select a from table) select * from cte一样使用cte
标签: sql-server stored-procedures common-table-expression dynamic-sql