なぜこれが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'
なぜこれが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
、行数が返されます。他の結果を返さないので、割り当てを行うだけで、それがすべてです。