gpt4 book ai didi

sql-server - 将 NULL 值传递到参数化 delphi SQL Server 查询中

转载 作者:行者123 更新时间:2023-12-03 15:11:20 26 4
gpt4 key购买 nike

我试图将空值传递给 TSQLDataset 参数。查询的形式如下:

Query_text:='MERGE INTO [Table] 
USING (VALUES (:A,:B)) AS Source (Source_A, Source_B)
....
WHEN MATCHED THEN
UPDATE SET A = :A
WHEN NOT MATCHED THEN
INSERT(A, B) VALUES (:A,:B);

SQL_dataset.CommandType:=ctQuery;
SQL_dataset.CommandText:=Query_text;

SQL_dataset.ParamByName('A').AsString:='A';
SQL_dataset.ParamByName('B').AsString:={ COULD BE NULL, OR A STRING };

SQL_dataset.ExecSQL;

参数 B 可为空,但也是外键。如果用户在此字段中输入某些内容,则必须根据另一个表中的值验证 B。如果它是空白的那么我希望它被忽略。我传入了 '',但这显然会产生 FK 违规错误。

我尝试过:

SQL_dataset.ParamByName('B').Value:=Null;

..但随后我收到“dbexpress 驱动程序不支持 tdbxtypes.unknown 数据类型”错误。

我也尝试过:

SQL_dataset.ParamByName('B').DataType:=ftVariant;
SQL_dataset.ParamByName('B').Value:=Null;

..但随后出现“dbexpress 驱动程序不支持 tdbxtypes.variant 数据类型”错误。

不确定我做错了什么,任何帮助将不胜感激。我目前正在根据字符串是否填充来制定参数列表,这效果很好;它只是有点笨拙(在我的实际查询中),因为有很多参数需要验证。

我使用的是 Delphi XE4 和 SQL Server 2012。

更新:

感谢您的所有帮助,您的建议一直都是正确的,是其他原因导致了“dbexpress driver”错误。我正在创建一个“灵活”参数列表以解决我的问题,这导致了异常:

Parameter_string:='';

If B<>'' then Parameter_string:='B = :B,'

Query_text:='MERGE ...'
'...'
'UPDATE SET A = :A, '+Parameter_string+' C = :C' ....

...这个想法是,如果 B 为空,则该参数不会在查询中“列出”。

这不起作用,或者我的实现不起作用(不知道为什么,我显然在某个地方错过了一个步骤)。

无论如何,工作代码:

Query_text:='MERGE ...'
'...'
'UPDATE SET A = :A, B = :B, C = :C' ....

SQL_dataset.CommandType:=ctQuery;
SQL_dataset.CommandText:=Query_text;

If B<>'' then
begin
SQL_dataset.ParamByName('B').AsString:='B';
end
else
begin
SQL_dataset.ParamByName('B').DataType:=ftString;
SQL_dataset.ParamByName('B').Value:=Null;
end;

最佳答案

关于:

SQL_dataset.ParamByName('B').Clear;

关于sql-server - 将 NULL 值传递到参数化 delphi SQL Server 查询中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17042429/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com