Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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 过程或函数“System_Set_Cookies”需要参数“@name”,但未提供该参数_Sql_Sql Server_Stored Procedures - Fatal编程技术网

Sql 过程或函数“System_Set_Cookies”需要参数“@name”,但未提供该参数

Sql 过程或函数“System_Set_Cookies”需要参数“@name”,但未提供该参数,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我在执行存储过程时遇到以下错误: 过程或函数“System_Set_Cookies”需要参数“@name”,但未提供该参数 但正如你所看到的,我已经声明了@name,它也有一个整型值 **-- Executing my SP** DECLARE @name int, @Id int, @value nvarchar(255), @update bit; SET @name = 0; SET @Id = 0; SET @value = 'Development'; SET @update = 0;

我在执行存储过程时遇到以下错误:

过程或函数“System_Set_Cookies”需要参数“@name”,但未提供该参数

但正如你所看到的,我已经声明了@name,它也有一个整型值

**-- Executing my SP**
DECLARE @name int, @Id int, @value nvarchar(255), @update bit;
SET @name = 0;
SET @Id = 0;
SET @value = 'Development';
SET @update = 0;
EXEC System_Set_Cookies;    

**-- Stored Procedure Query**
ALTER PROCEDURE [dbo].[System_Set_Cookies]
            -- Add the parameters for the stored procedure here
            @name INT,
            @Id INT,
            @value NVARCHAR(255),
            @update BIT
        AS
        BEGIN
            -- SET NOCOUNT ON added to prevent extra result sets from
            -- interfering with SELECT statements.
            SET NOCOUNT ON;

            -- Insert statements for procedure here
            IF @update = 1
                BEGIN
                    SELECT @Id = COOKIE_ID FROM tbl_Cookies WHERE cookie_name = @name;

                    UPDATE tbl_Cookies SET cookie_name = @name WHERE COOKIE_ID = @Id;

                    UPDATE tbl_Cookies_User SET cookie_value = @value WHERE cookie_id = @Id;
                END
            ELSE
                BEGIN
                    INSERT INTO tbl_Cookies (cookie_name) VALUES (@name);

                    SELECT @Id = MAX(COOKIE_ID) FROM tbl_Cookies;

                    INSERT INTO tbl_Cookies_User (cookie_id, cookie_value) VALUES (@Id, @value);
                END
        END

仅仅因为您有一个与存储过程的参数名匹配的变量,SQL Server并不认为您一定要将该变量作为参数传递。你必须明确:

DECLARE @name int, @Id int, @value nvarchar(255), @update bit;
SET @name = 0;
SET @Id = 0;
SET @value = 'Development';
SET @update = 0;
EXEC System_Set_Cookies @name, @id, @value, @update;
而且名字甚至不必匹配:

DECLARE @OOname int, @Id int, @value nvarchar(255), @update bit;
SET @OOname = 0;
SET @Id = 0;
SET @value = 'Development';
SET @update = 0;
EXEC System_Set_Cookies @name = @OOname, @id, @value, @update;

从C调用时,请确保将CommandText设置为存储过程的名称,将CommandType设置为StoredProcedure,然后参数将自动匹配,而无需显式设置

同时标记正在使用的dbms。该代码是特定于产品的。@Yogeshharma抱歉,但我也需要通过C运行它,我在那里遇到了相同的错误,因此我认为您的答案是不可能的。谢谢您的回答。@Yogeshharma MS SQLI在执行存储过程时遇到了这个错误:您在哪里执行它?怎样发布执行它的代码。