SQL Server错误消息被截断

时间:2017-04-05 14:35:51

标签: sql-server sql-server-2000

这不是关于截断的错误消息。相反,错误消息本身(来自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

2 个答案:

答案 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