难以在MSSQL中打印一个特定查询

时间:2015-08-04 14:38:32

标签: sql sql-server

我正在尝试构建一个小型查询,它将从数据库中的各个字段中提取数据,并以人类可读的列表格式打印它们(这是操作员习惯看到的)。我在这里的代码远非完整,但在我看来它应该可行。

DECLARE @PSUCARD VARCHAR(20)
DECLARE @EQUIPMENT VARCHAR(50)
DECLARE @T1 VARCHAR
SET @PSUCARD = 'PSU-888'
SET @EQUIPMENT = '123_POUCH'

PRINT @PSUCARD + ':'
PRINT @EQUIPMENT
PRINT ''

IF (SELECT TEMPERATURE_MAIN FROM PSU WHERE PSU.PART_ID = @PSUCARD AND     PSU.OPERATION_RESOURCE_ID = @EQUIPMENT)IS NOT NULL  BEGIN
    SET @T1 = (SELECT TEMPERATURE_MAIN FROM PSU WHERE PSU.PART_ID = @PSUCARD AND PSU.OPERATION_RESOURCE_ID = @EQUIPMENT)
    PRINT 'Temperature: ' + @T1
    --(SELECT TEMPERATURE_MAIN FROM PSU WHERE PSU.PART_ID = @PSUCARD AND PSU.OPERATION_RESOURCE_ID = @EQUIPMENT)
END

如果按原样执行代码,@ T1将返回*而不是值。如果我从下面的行中删除评论,我会放心,那里确实存在价值。 我有其他非常类似的代码,工作正常。有什么想法吗?

另外,我不知道这是否有助于诊断问题,但是尽管DB中的温度字段是INT,但如果我尝试将@T1视为INT,我会收到转换消息。

2 个答案:

答案 0 :(得分:4)

这是因为您将@T1声明为VARCHAR而没有长度。根据{{​​3}}:

  

在数据定义或变量声明中未指定n时   声明,默认长度为1.使用时未指定n   CAST和CONVERT函数,默认长度为30。

在声明VARCHAR变量时,您应始终指定长度:

DECLARE @T1 VARCHAR(50)

答案 1 :(得分:1)

您需要为varchar数据类型提供长度,否则它只需要一个字符

DECLARE @T1 VARCHAR(50)