簡體   English   中英

在存儲過程中插入后,Select不返回行

[英]Select does not return rows after insert in stored procedure

我試圖將行插入2個表中,然后在SQL Server 2012中的存儲過程中進行選擇,由於某種原因,我在php(sqlsrv)中得到0行(在navicat中,我確實得到了1行)

ALTER PROCEDURE [dbo].[Register]
@FacebookId AS INT,
@SessionKey AS VARCHAR(255),
@Name AS NVARCHAR(255),
@Gender AS INT = 0,
@ProfilePicture AS VARCHAR(255)
AS
BEGIN
    IF NOT EXISTS(SELECT Id FROM Users WHERE FacebookId = @FacebookId)
        BEGIN
            INSERT INTO Users(FacebookId,SessionKey) VALUES (@FacebookId,@SessionKey)
            DECLARE @Id AS INT
            SET @Id = scope_identity()
            INSERT INTO UserData(Id,Name,Gender,ProfilePicture) VALUES (scope_identity(),@Name,@Gender,@ProfilePicture)
            SELECT 1 AS success
        END
    ELSE
        BEGIN
            SELECT 0 AS success
        END
END

php代碼:

        function Register($facebookId,$sessionKey,$name,$gender,$profilePicture)
        {
             return     SingleResponseRequest('Register',array('@FacebookId','@SessionKey','@Name','@Gender','@ProfilePicture'),
                                  array($facebookId,$sessionKey,$name,$gender,$profilePicture),'success');

        }


        function SingleResponseRequest($procedureName,$procedureValues,$valuesArray,$returnColumn)
        {
            require_once __DIR__ . '/Configuration/Connection.php';
            $db = new Connection();
            $values = '';

            foreach($procedureValues as $value)
                $values .= $value . ' = ? ,';

            $values = substr($values,0,strlen($values)-1);
            $query = "EXEC $procedureName $values";
            $res = $db->Query($query,$valuesArray);
            $row_count = sqlsrv_num_rows( $res );
            echo 'rows: '. $row_count;

            if ($row_count === false)
                echo "Error in retrieving row count.";

            $row = sqlsrv_fetch_array( $res, SQLSRV_FETCH_ASSOC);

            return $row[$returnColumn];
        }

   public function Query($query,$params)
    {
        for($i = 0 ; $i < count($params); $i++)
        {
            $params[$i] = $this->ms_escape_string($params[$i]);
            $params[$i] = utf8_encode($params[$i]);
        }

        $options =  array( "Scrollable" => SQLSRV_CURSOR_CLIENT_BUFFERED );

        $result = sqlsrv_query($this->connection, $query, $params,$options);
        if ( $result === false )
        {
            echo "Error in statement execution.<br>";
            echo $query;
            die( print_r( sqlsrv_errors(), true));
        }
        return $result;
    }

如果轉到其他條件,我的確得到0,這可能是什么問題?

嗨,我有同樣的問題。 我解決了。 您只需在存儲過程中放置​​“ SET NOCOUNT ON”即可

例如

CREATE procedure mysampleprocedure

AS BEGIN TRANSACTION TRANS

set nocount on
insert into sampletable(id,data) values
(
101,
'abc'
);

SELECT count(*) AS id FROM sampletable AS id;

IF @@ERROR > 0
BEGIN 
 ROLLBACK TRANSACTION TRANS
 end
 ELSE
 BEGIN
 COMMIT TRANSACTION TRANS
 end
GO

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM