我正在尝试构建一个小型查询,它将从数据库中的各个字段中提取数据,并以人类可读的列表格式打印它们(这是操作员习惯看到的)。我在这里的代码远非完整,但在我看来它应该可行。
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,我会收到转换消息。
答案 0 :(得分:4)
这是因为您将@T1
声明为VARCHAR
而没有长度。根据{{3}}:
在数据定义或变量声明中未指定n时 声明,默认长度为1.使用时未指定n CAST和CONVERT函数,默认长度为30。
在声明VARCHAR
变量时,您应始终指定长度:
DECLARE @T1 VARCHAR(50)
答案 1 :(得分:1)
您需要为varchar
数据类型提供长度,否则它只需要一个字符
DECLARE @T1 VARCHAR(50)