这不是关于截断的错误消息。相反,错误消息本身(来自SSMS)似乎已被截断。知道它试图告诉我的是什么吗?有没有办法恢复完整的错误消息?
Msg 203, Level 16, State 2, Line 80
The name 'SELECT
SUM(CASE WHEN #actual_types.typ = 'AA' THEN #actual_types.qty ELSE 0 END) AS 'AA_Qty',
SUM(CASE WHEN #actual_types.typ = 'AB' THEN #actual_types.qty ELSE 0 END) AS 'AB_Qty',
SUM(CASE WHEN #actual_types.typ = 'AC' THEN #actual_types.qty ELSE 0 END) AS 'AC_Qty',
SUM(CASE WHEN #actual_types.typ = 'BA' THEN #actual_types.qty ELSE 0 END) AS 'BA_Qty',
SUM(CASE WHEN #actual_types.typ...
我正在使用连接到SQL 2000服务器的SSMS 2016。对于上下文 - 我试图创建一个当前脚本的一个更通用的版本(对生产数据工作正常),使用临时表和示例数据,以保存作为参考,以防我将来需要类似的东西。 / p>
这是导致错误的代码:
CREATE TABLE #possible_types
(typ varchar(2))
CREATE TABLE #actual_types
(typ varchar(2),
dt smalldatetime,
qty int)
INSERT #possible_types
SELECT 'AA'
UNION SELECT 'AB'
UNION SELECT 'AC'
UNION SELECT 'BA'
UNION SELECT 'BB'
UNION SELECT 'BC'
INSERT #actual_types
SELECT 'AA', '2015-01-01', 123
UNION SELECT 'AA', '2016-01-01', 321
UNION SELECT 'AA', '2017-01-01', 222
UNION SELECT 'BA', '2016-01-01', 777
UNION SELECT 'BC', '2017-01-01', 456
DECLARE @qry varchar(8000)
SELECT @qry = 'SELECT' + CHAR(13)
SELECT @qry = @qry + s.sql_gen
FROM
(SELECT DISTINCT 'SUM(CASE WHEN #actual_types.typ = '''+ typ + ''' THEN #actual_types.qty ELSE 0 END) AS ''' + typ + '_Qty'',' + char(13) AS [sql_gen]
FROM #possible_types) s
SELECT @qry = LEFT(@qry, LEN(@qry) - 2) -- gets rid of last comma and carriage return
SELECT @qry = @qry + '
FROM #actual_types
WHERE #actual_types.dt >= ''2017-01-01''
'
--PRINT @qry
EXEC @qry;
DROP TABLE #possible_types
DROP TABLE #actual_types
答案 0 :(得分:3)
sql server中的错误消息存储在sys.messages中。您可以使用提供的信息查询消息表。
select * from sys.messages
where message_id = 203
and language_id = 1033 --1033 is English (assumed you can read English)
这将返回"名称'%。* ls'不是有效的标识符。"
你的代码中显然还有其他不可思议的东西。您能否分享您的查询,我们可以帮助确定问题的实际原因。
答案 1 :(得分:1)
我有同样的错误。现在它对我有用。
我删除了'为了字段名_Qty。 (实际上没有必要让你的查询工作)。
此外我编辑了:
DECLARE @qry nvarchar(4000)
和
EXECUTE sp_executesql @qry;
完整代码编辑:
CREATE TABLE #possible_types
(typ varchar(2))
CREATE TABLE #actual_types
(typ varchar(2),
dt smalldatetime,
qty int)
INSERT #possible_types
SELECT 'AA'
UNION SELECT 'AB'
UNION SELECT 'AC'
UNION SELECT 'BA'
UNION SELECT 'BB'
UNION SELECT 'BC'
INSERT #actual_types
SELECT 'AA', '2015-01-01', 123
UNION SELECT 'AA', '2016-01-01', 321
UNION SELECT 'AA', '2017-01-01', 222
UNION SELECT 'BA', '2016-01-01', 777
UNION SELECT 'BC', '2017-01-01', 456
DECLARE @qry nvarchar(4000)
SELECT @qry = 'SELECT' + CHAR(13)
SELECT @qry = @qry + s.sql_gen
FROM
(SELECT DISTINCT 'SUM(CASE WHEN #actual_types.typ = '''+ typ + ''' THEN #actual_types.qty ELSE 0 END) AS ' + typ + '_Qty,' + char(13) AS [sql_gen]
FROM #possible_types) s
SELECT @qry = LEFT(@qry, LEN(@qry) - 2) -- gets rid of last comma and carriage return
SELECT @qry = @qry + '
FROM #actual_types
WHERE dt >= ''2017-01-01''
'
PRINT @qry
EXECUTE sp_executesql @qry;
DROP TABLE #possible_types
DROP TABLE #actual_types