以下代码片段应演示我在SQL Server和VBScript Web应用程序中都观察到的问题:
SELECT '"Hello World"'
SELECT '"Hello World' + CHAR(0) + '"'
结果:
"Hello World"
"Hello World
请注意,第二个结果行缺少最后的双引号。
我知道您不能在SQL Server中将字符串连接为NULL值。但是,下面的代码片段揭示了就SQL Server而言,CHAR(0)不被视为NULL。
SELECT ISNULL(CHAR(0), 'CHAR(0) IS CONSIDERED NULL')
结果:
此外,当我从数据库读取该值到VBScript中的变量中时,我也无法连接到该变量。
我不是C开发人员,但我知道C样式的字符串以空字符终止。这相关吗?有人可以帮我理解为什么在SQL Server和VBScript中会发生这种情况吗?
我可以通过简单地替换有问题的数据中的所有CHAR(0)来解决我的紧迫问题,但首先,我想了解其原因并制定预防性解决方案。
testSql = "SELECT '""Hello World' + CHAR(0) + '""' AS TestString"
set resultSet = conn.execute(testSql)
testString = resultSet.Fields.Item("TestString")
testString = testString & "}"
Response.Write testString
结果:
"Hello World
答案 0 :(得分:1)
SQL Server将以nul字符结尾的字符串连接在一起就很好了。参见以下示例:
SELECT len('"Hello World' + CHAR(0) + '"')
输出:
14
SELECT len('“” Hello World“ + CHAR(0)+'”'+'“ Hello World'+ CHAR(0)+'”')
输出:
28
首先将字符串存储到CTE或表中时,结果是相同的。
它在VB中的处理和输出使其看上去好像没有。尝试打印在VB中退出SQL的字符串的长度。