2

テーブル名を送信してそこからすべてのレコードを取得する手順を実行しようとしています..別の手順を作成する必要がないように...しかし、いくつかの問題に直面しています。

ALTER PROCEDURE [dbo].[getTableData] 
-- Add the parameters for the stored procedure here
@tableName Varchar(100),
@whrFldName NVarchar(100)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

--  Insert statements for procedure here

DECLARE @ActualTableName AS NVarchar(255)

SELECT @ActualTableName = QUOTENAME( TABLE_NAME )
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = @tableName

DECLARE @sql AS NVARCHAR(MAX)
SELECT @sql = 'SELECT * FROM ' + @ActualTableName + ' WHERE ' + 
                       @whrFldName + ' = ''y'' ;'
--PRINT @sql
EXEC(@SQL)
END

PHPコードはこれです..

$sql ="EXEC [dbo].[getTableData] 'tbl_services','serviceStatus'";
$rst = odbc_exec($connection, $sql);
$i = 0;
while($result = odbc_fetch_array($rst))
{
    $returnPageData[$i] = $result;
    $i++;
}

サーバーでは問題なく実行されますが、 PHPコードから呼び出すとnull が返されます。

ここで、フィールドを削除*して配置すると、問題なく動作します.コードをよくテストしましたが、特にテキスト型フィールドで問題が発生します..

手順をこれに変更すると、正常に動作します..

ALTER PROCEDURE [dbo].[getTableData]
-- Add the parameters for the stored procedure here
@rowsPerPage as bigint,
@pageNum as bigint
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

WITH SQLPaging AS   ( 
    SELECT TOP(@rowsPerPage * @pageNum) ROW_NUMBER() OVER (ORDER BY creationDate DESC) 
    AS resultNum, * 
    FROM [DB_SB].[dbo].[tbl_blog] )
SELECT 
    blogTitle,
    blogSlug,
    blogImage,
    substring( blogContent, 1, 210 ) AS blogContent,
    creationDate,
    blogAddedBy

 FROM SQLPaging WITH (nolock) WHERE resultNum > ((@pageNum - 1) * @rowsPerPage)

終わり

しかし、これは論理的ではありません..毎回フィールドを送信すると..これは私が正確に望むものではありません..

何か解決策はありますか??助けてください...

4

1 に答える 1

0

データベース エンジンに実際に何が送られているかを確認するには、SQL Server Profiler を使用する必要があります。

SSMS から実行したときにストアド プロシージャが正しく実行される場合は、PHP 部分のどこかに問題があります。

SSMS からテストするときに使用するのと同じデータベースを使用していますか? そこには何か問題があるかもしれません…</p>

于 2013-09-10T15:02:29.823 に答える