MSSQL 剂量不返回所有字段的数据


MSSQL dose not return data for all fields

我正在尝试运行一个过程,在该过程中我将发送表名以从中获取所有记录。这样我就不必创建不同的程序...但我在这方面遇到了一些问题。

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)

结束

但这是不合逻辑的。如果我每次都发送字段..这不是我想要的。

任何解决方案??请帮忙...

您需要使用 SQL Server Profiler 来查看数据库引擎的实际内容。

如果存储过程在从 SSMS 运行时正确执行,则 PHP 部分中的某个地方存在问题。

从 SSMS 进行测试时是否使用相同的数据库?这可能有一些问题...