Sql server 作为列名处理的文本
这在SQL Server 2014上运行正常:Sql server 作为列名处理的文本,sql-server,delphi,Sql Server,Delphi,这在SQL Server 2014上运行正常: UPDATE MYTABLE SET MYFIELD = MYFIELD + 'the quick brown fox jumped over the lazy dog' + CAST(FOR_DATE AS VARCHAR(30)) 将其移植到Delphi中的查询: SQL.Text := UPDATE MYTABLE SET MYFIELD = MYFIELD + "the quick brown fox j
UPDATE MYTABLE
SET MYFIELD = MYFIELD + 'the quick brown fox jumped over the lazy dog'
+ CAST(FOR_DATE AS VARCHAR(30))
将其移植到Delphi中的查询:
SQL.Text := UPDATE MYTABLE SET MYFIELD = MYFIELD
+ "the quick brown fox jumped over the lazy dog"
+ CAST(FOR_DATE AS VARCHAR(30))
这会引发一个错误:
那只敏捷的棕色狐狸跳过了那只懒狗,被当作纵队对待
名字
文本周围的单引号也不起作用
我遗漏了什么?此查询应该可以做到这一点,您可以使用该函数在字符串中包含引号:
SQL.Text := 'UPDATE MYTABLE SET MYFIELD=MYFIELD + ' +
QuotedStr('the quick brown fox jumped over the lazy dog') +
'+ CAST(FOR_DATE as varchar(30))';
或者,如果要在字符串中包含引号,则需要将其加倍:
SQL.Text := 'UPDATE MYTABLE SET MYFIELD=MYFIELD + ' +
'''the quick brown fox jumped over the lazy dog''' +
'+ CAST(FOR_DATE as varchar(30))';
最后,更好、更安全的方法是使用参数化查询,这是防止:
您应该改用参数化查询,让它为您处理引号:SQL.Text:=“updatemytable SET MYFIELD=MYFIELD+:MyText+CASTFOR_DATE AS VARCHAR30”;parabyname'MyText'。AsString:=“敏捷的棕色狐狸跳过了懒狗”;
SQL.Text := 'UPDATE MYTABLE SET MYFIELD = MYFIELD + :MyText'+
' + CAST(FOR_DATE AS VARCHAR(30))';
ParamByName('MyText').AsString := 'variable text';