null 값을 TSQLDataset 매개 변수에 전달하려고합니다. 쿼리 형식은 다음과 같습니다.매개 변수가있는 delphi SQL 서버 쿼리에 NULL 값을 전달합니다.
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는 null이지만, 외래 키이기도합니다. 사용자가이 필드에 내용을 입력하면 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 데이터 형식을 지원하지 않습니다"있어요.
내가 잘못하고있는 것이 확실하지 않은 경우 어떤 도움을 주시면 감사하겠습니다. 현재 문자열이 채워 졌는지 여부에 따라 매개 변수 목록을 그리는 중입니다. 유효성을 검사 할 매개 변수가 꽤 있기 때문에 (내 실제 쿼리에서) 조금 어색하다. 델파이 XE4와 SQL 서버를 사용하고
2012
업데이트 : 모든 도움
감사합니다, 당신의 제안은 그 '의 dbExpress 드라이버'를 생산 뭔가 다른했다 옳았했다 오류. 나는 내 문제를 해결하기 위해 노력에 '유연한'매개 변수의 목록을 작성하고,이 예외 발생 :
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;
감사합니다, 나는이 시도는, 같은 오류가 발생합니다. 나는이 오류가 발생했다는 것을 알고 싶습니다. – Alex
도움을 주셔서 감사합니다. 업데이트를 참조하십시오. – Alex