Bir SQLServer 2008 Express bağlanmak için PHP için SQLServer sürücüsü kullanıyorum. Şu anda, ben saklı yordamlar tarafından tüm SELECT, UPDATE ve INSERT ifadeleri değiştirmek için çalışıyorum. Bu sadece bir deyim içeren SPs için iyi çalışıyor. Ama şimdi bir güncelleme ile birini yapmaya çalıştım, ve ben hata mesajı alıyorum "doğrudan SQLçalıştırılıyor; hayır imleci.". Ben aynı parametre değerleri ile Management Studio SP cezası arayabilirsiniz.
Herhangi bir fikir?
Cheers Alex
EDIT: burada bir güncelleme prosedürü. Komik kısmı prosedür aslında ince yürütülür ve bu gerekiyordu gibi verileri günceller. Ama yine de bir istisna sonuçlanan bir hata döndürür.
Birincisi, başarısız PHP kodu:
if (! $this->Result = sqlsrv_query($this->Conn, $strQuery, $arrParameters, array("Scrollable"=>SQLSRV_CURSOR_STATIC)))
{
$this->sendErrorMail($strQuery, $arrParameters);
throw new Exception(4001);
}
SQL
USE [testsite]
GO
/****** Object: StoredProcedure [dbo].[Items_countDownload] Script Date: 09/09/2010 18:03:28 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Alexis Hildebrandt
-- Create date: 2010-09-09
-- Description: Increases the download count by 1
-- =============================================
ALTER PROCEDURE [dbo].[Items_countDownload]
@Id INT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @DownloadCount INT = 0, @MaxCount INT = 0, @Id2 INT = 0
DECLARE itemCursor CURSOR SCROLL
FOR
SELECT Id, Downloads
FROM Items
WHERE Id = @Id
OR SKU IN
(
SELECT SKU FROM Items WHERE Id = @Id
)
FOR UPDATE OF Downloads
OPEN itemCursor
FETCH NEXT FROM itemCursor
INTO @Id, @DownloadCount;
-- Find the largest Download count across all versions of the item
WHILE @@FETCH_STATUS = 0
BEGIN
IF @MaxCount < @DownloadCount
SET @MaxCount = @DownloadCount;
FETCH NEXT FROM itemCursor
INTO @Id, @DownloadCount;
END
-- Increase the download count by one for all versions
FETCH FIRST FROM itemCursor
INTO @Id, @DownloadCount;
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE Items
SET Downloads = @MaxCount + 1
WHERE CURRENT OF itemCursor
FETCH NEXT FROM itemCursor
INTO @Id, @DownloadCount;
END
CLOSE itemCursor;
DEALLOCATE itemCursor;
END