Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 I';我期望返回类型为char,但得到int_Sql Server 2008_Sql Server 2008 R2 - Fatal编程技术网

Sql server 2008 I';我期望返回类型为char,但得到int

Sql server 2008 I';我期望返回类型为char,但得到int,sql-server-2008,sql-server-2008-r2,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' 我认为这是因为@Exists参数数据类型是“char(5)” 当数据具有固定长度时,必须

有人能告诉我为什么返回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'

我认为这是因为@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

由于缺少
set nocount on
语句,它将返回一个行计数。因为它不返回任何其他结果,所以它只执行赋值,这就是您得到的所有结果。

因为您没有指定它返回的结果?…为什么要使用过程返回单个值?这正是函数的设计目的,您可以专门指定返回类型。@KenWhite从C#调用它。感谢您的澄清。您在问题中没有明确说明这一点。这可能有效,但您没有回答所问的问题,即“为什么我的过程在需要字符时返回int?”。谢谢@KenWhite。我补充了原因。