截断的SQL Server错误消息
这不是关于截断的错误消息。相反,错误消息本身(来自SSMS)似乎已被截断。有什么想法在这里告诉我什么?有没有办法恢复完整的错误信息?截断的SQL Server错误消息
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...
我正在使用SSMS 2016连接到SQL 2000服务器。对于上下文 - 我试图使用临时表和示例数据创建一个当前脚本的更通用版本(适用于生产数据),以备将来保存为参考。
这是负责该错误代码:在SQL Server
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
错误信息都存储在sys.messages。您可以使用提供的信息查询消息表。
select * from sys.messages
where message_id = 203
and language_id = 1033 --1033 is English (assumed you can read English)
这将返回“名称'%。* ls'不是有效的标识符。”
你的代码显然有其他东西。你可以分享你的查询,我们可以帮助确定问题的实际原因。
我有同样的错误。现在它适用于我。
我删除了'为字段_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
啊,好的侦探工作,谢谢!有趣的是'EXECUTE sp_executesql @qry;'和'EXEC @qry;'不会做同样的事情。由于我的具体问题是关于服务器的消息,我认为@Sean得到了复选标记,但肯定是+1。 – CactusCake
我同意你的意见。 – etsa
我已经添加了原代码的问题。如果我使用'PRINT'而不是'EXEC'运行,它会在消息窗口中显示我想要的内容。我甚至可以复制该结果并将其粘贴回编辑器,它会执行得很好... – CactusCake
注 - sys.messages不是我的(古代)服务器上的有效对象。但是'select * from master.dbo.sysmessages where error = 203 and msglangid = 1033' does not work。谢谢! – CactusCake
很高兴你在你的系统上找到它。忘了你使用的是2000.顺便说一下,你有可能升级的任何机会? 2000年已经退出近十年的支持。 –