2012-12-05 22 views
0

誰能告訴我爲什麼這個返回一個int類型的?我期待字符的返回類型,但得到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' 
+1

因爲您還沒有指定它返回的內容嗎?... –

+0

爲什麼使用過程返回單個值?這正是設計要實現的功能,您可以專門指定返回類型。 –

+0

@MitchWheat感謝米奇。 – StatsViaCsh

回答

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 
+0

這可能會起作用,但是您沒有回答問題,即「爲什麼當我期待char時我的過程返回int?」。 –

+0

謝謝@KenWhite。我添加了原因。 – Nathan

+0

@Nathan感謝的人。 – StatsViaCsh

0

缺乏一個set nocount on聲明,它返回的行數。由於它不返回任何其他結果,它只是做一個任務,那就是你所得到的。

相關問題