Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在T-SQL中转义空字符?_Sql Server_Tsql - Fatal编程技术网

Sql server 如何在T-SQL中转义空字符?

Sql server 如何在T-SQL中转义空字符?,sql-server,tsql,Sql Server,Tsql,我使用的库不支持参数化查询,因此我尝试编写一个函数来模拟它们,如下所示: let params = [ String "\x00'blah" ] in Mssql.execute ~params "SELECT $1" 为了测试这一点,我向它发送一个包含每个ASCII字符的字符串,并且似乎只需要转义两个字符: “-需要作为 \0'-似乎必须将其更改为CHAR0 空字符部分使我的转义函数复杂得可笑,因为它必须跟踪字符串是否打开以及是否需要添加+。我可以编写一个简单得多的版本,将其转换为CODE0

我使用的库不支持参数化查询,因此我尝试编写一个函数来模拟它们,如下所示:

let params = [ String "\x00'blah" ] in
Mssql.execute ~params "SELECT $1"
为了测试这一点,我向它发送一个包含每个ASCII字符的字符串,并且似乎只需要转义两个字符:

“-需要作为 \0'-似乎必须将其更改为CHAR0 空字符部分使我的转义函数复杂得可笑,因为它必须跟踪字符串是否打开以及是否需要添加+。我可以编写一个简单得多的版本,将其转换为CODE0++'a'++'s'++'d'之类的内容,但我怀疑在向服务器发送兆字节数据时,这会非常低效。如果我发送一兆字节的空字符,我的版本也会变得非常低效,这不是我计划要做的,但我不喜欢在代码中留下定时炸弹

我想知道的是-有没有其他方法可以逃避这些空字符

还有,我遗漏了什么吗?我找不到这方面的任何文档,因为每个人似乎都认为您可以访问一个像样的t-SQL库


编辑:看起来T-SQL中应该可以使用空字符,但我使用的库有一个限制,它调用FreeTDS,它假设字符串以空结尾,我似乎找不到任何替代函数。看起来,重写我用来支持真正参数化查询的库可能是唯一的选择:\

我不知道您的库,但我知道用于简单sql操作的好库。此库具有插入、更新或删除记录的简单方法,无需编写SQL命令。还支持Merge命令。这意味着如果您不知道该记录是否存在,但希望保存该记录。 如果您想加密敏感数据,还需要一种方法

这是一个例子

crypto.SetCryptoKey("DB-TEST-CUST");
dRec cust = new dRec("dbo.customer");
cust.fields["email"] = "john.lennon@gmail.com";
cust.fields["name"] = "John Lennon";
cust.fields["description"] = "John's secret world";
cust.fields["password"] = "abc123xyz".dEncryption();  //encryption text include some special characters, but methods support this.
if (cust.Insert() >= 0)
    return "record inserted";
else
    return "record error:" + db.LastException_Message;

欲了解更多信息,请访问图书馆网站:

您到底想做什么?您担心在SELECT子句中使用null,因为它在字符串连接中是null,或者在WHERE子句中使用null是因为过滤?如果连接出现问题,您可以使用CONCAT函数,它将自动用空字符串替换null。如果您试图处理WHERE子句或JOIN中的空值,您可以使用ISNULL函数来处理它们。@gotqn问题涉及包含字符的字符串,而不是SQL空值的处理。