我期待一个返回类型的char,但得到int

时间:2012-12-05 00:03:53

标签: sql-server-2008 sql-server-2008-r2

谁能告诉我为什么这会返回一种int?

ALTER PROCEDURE [dbo].[spTableExists] @TableName char(40), @Exists char(5) OUTPUT  
AS

IF object_id(@TableName) is not null
    select @Exists = 'true'
ELSE
    select @Exists = 'false'

2 个答案:

答案 0 :(得分:1)

我认为这是因为@Exists参数数据类型为“char(5)”。

当数据具有固定的长度时,必须使用字符。

试试这个:

CREATE PROCEDURE [dbo].[spTableExists] @TableName varchar(40), @Exists varchar(5) OUTPUT  
AS

SET @Exists = 'false'
IF object_id(@TableName) is not null
    IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(@TableName) AND type in (N'U'))
    BEGIN
    SET @Exists = 'true'
    END
ELSE
    SET @Exists = 'false'

SELECT @Exists

答案 1 :(得分:0)

缺少set nocount on语句,它返回行计数。因为它不会返回任何其他结果,所以它只是进行一项任务,就是你得到的所有结果。