0

谁能告诉我为什么这会返回一个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'
4

2 回答 2

1

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

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

尝试这个:

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
于 2012-12-05T00:12:40.217 回答
0

缺少一个set nocount on语句,它返回一个行数。因为它不返回任何其他结果,所以它只是做一个赋值,这就是你得到的全部。

于 2012-12-05T01:58:27.483 回答