2012-10-31 72 views
1

我想编写一个需要2个参数的过程(Int,string)如果表中有一行存在,我会得到@dane = 1;最后我想选择@dane,但我的程序不好。我不能使用return @dane。MSSQL - 返回选择

USE [SS] 
    GO 

    SET ANSI_NULLS ON 
    GO 
    SET QUOTED_IDENTIFIER ON 
    GO 

    CREATE PROCEDURE [permission].[CheckSkill] 
(
    @SkillId INT, -- Identyfikator użytkownika 
    @Description NVARCHAR(100) = NULL 
) 
AS 
BEGIN 
    SET NOCOUNT ON; 
    DECLARE @dana as int 
    SET @dana = 0 

    -- this is redundant: 
    --SET @Description = RTRIM(LTRIM(ISNULL(@Description,''))) 

    IF EXISTS (SELECT * FROM permission.UserXSkill Where permission.UserXSkill.SkillId = @SkillId) 
    BEGIN 
     SET @dana = 1; 
    END 

    SELECT @dana AS ID; 
END 
GO 

主题[关闭]感谢您的帮助。

+0

你有一个错字 - 你声明的变量'@ dana'然后设置变量' @ dane'。当为变量赋值时也必须使用'SET'或'SELECT'。 –

+0

@Ed Harper我改变了这个。这是我的错误。 –

回答

2

将值分配给变量时,需要使用SETSELECT

EXISTS似乎有助于需求在IF

@Description参数没有用,多余的

USE [SS] 
GO 

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE [permission].[CheckSkill] 
(
    @SkillId INT, -- Identyfikator użytkownika 
    @Description NVARCHAR(100) = NULL, 

) 
AS 
BEGIN 
    SET NOCOUNT ON; 
    DECLARE @dana as int 
    SET @dana = 0 

    -- this is redundant: 
    --SET @Description = RTRIM(LTRIM(ISNULL(@Description,''))) 

    IF EXISTS (SELECT * FROM permission.UserXSkill Where permission.UserXSkill = @SkillId) 
    BEGIN 
     SET @dana = 1; 
    END 

    SELECT @dana AS ID; 
END 
GO 
+0

等待我必须检查 –

+0

@ Rafael-JuniorMVCDeveloper - 这是从您的原始文章中提取的。您需要检查'UserXSkill'表所在的模式 - 尝试'SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME ='UserXSkill''。将'permission'替换为结果集中'TABLE_SCHEMA'列的值。 –

+0

感谢您的帮助。 –