2012-10-31 73 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

感謝您的幫助。 –