【发布时间】:2021-10-20 08:18:40
【问题描述】:
我有一个使用 pyodbc 包从 SQL Server 检索数据的 SQL 语句。
问题是查询没有返回所有数据,而是返回了几条记录。
例子:
CREATE TABLE [dbo].[t1]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[first] [nvarchar](50) NULL,
[last] [nchar](50) NULL,
[Rating] [int] NULL,
CONSTRAINT [PK_t1]
PRIMARY KEY CLUSTERED ([ID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
数据:
SQL 语句:
advanced_search_term_list =[]
sql = (
r"select ID, first, last, Rating "
r"from dbo.t3 "
r"where "
r"(first LIKE CONCAT('%', ?, '%') OR ? IS NULL) AND "
r"(last LIKE CONCAT('%', ?, '%') OR ? IS NULL) AND "
r"(Rating = ? OR ? IS NULL)"
)
param1 = advanced_search_term_list[0]
param2 = advanced_search_term_list[1]
param3 = advanced_search_term_list[2]
rows = cursor.execute(sql, [param1, param1, param2, param2, param3, param3]).fetchall()
for row in rows:
print(row.ID)
print(row.first)
print(row.last)
print(row.Rating)
如果用户在没有任何用户输入的情况下运行此 SQL 语句,则预期输出是所有行。
但是,它只返回这些行:
【问题讨论】:
-
这看起来您没有发送
NULL值。例如,对于param3的值,您正在传递0。 -
好的,为什么它只返回这些记录??我希望要么返回所有记录,要么什么都不返回
-
根据问题指南,请不要发布代码、数据、错误消息等的图像 - 将文本复制或输入到问题中。请保留将图像用于图表或演示渲染错误,无法通过文本准确描述的事情。
-
@DaleK 对不起,我会尽力解决它
-
当用户不输入任何内容时,上述参数的实际值是多少?请记住
''和0都不是NULL。我怀疑您实际传递的不是NULL(或Python 中的None),而是''、''和0。
标签: python sql sql-server