【发布时间】:2013-11-08 12:07:00
【问题描述】:
我需要获取我正在为其构建动态查询的表的 TOP_PK、IDENT_CURRENT、IDENT_INCR、IDENT_SEED,如下所示:
sGetSchemaCommand = String.Format("SELECT (SELECT TOP 1 [{0}] FROM [{1}]) AS TOP_PK, IDENT_CURRENT('[{1}]') AS CURRENT_IDENT, IDENT_INCR('[{1}]') AS IDENT_ICREMENT, IDENT_SEED('[{1}]') AS IDENT_SEED", pPrimaryKey, pTableName)
这里pPrimaryKey是表的主键列名,pTableName是表名。
现在,当 Table_Name 包含“'”字符时,我遇到了问题。(例如 KIN'1)
当我使用上述逻辑并构建查询时,它将如下所示:
SELECT (SELECT TOP 1 [ID] FROM [KIL'1]) AS TOP_PK, IDENT_CURRENT('[KIL'1]') AS CURRENT_IDENT, IDENT_INCR('[KIL'1]') AS IDENT_ICREMENT, IDENT_SEED('[KIL'1]') AS IDENT_SEED
在这里,通过执行上述查询,我得到如下错误:
“1”附近的语法不正确。 字符串 ') AS IDENT_SEED' 后面的非闭合引号。
那么,谁能告诉我解决这个问题的最佳方法?
【问题讨论】:
-
尝试将要保留的单引号加倍。例如,
KIL'1变为KIL''1,IDENT_CURRENT('[KIL'1]')变为IDENT_CURRENT('[KIL''1]') -
似乎类似于 SO 问题:stackoverflow.com/questions/6764197/…
-
@Doug_Ivison 如果有多个 ' 像 KIN''1 或 KIN'''1 我需要再插入一个 ' 吗?
-
每个 ' 都需要替换为 ''。
-
对于
KIN''1,它仍然加倍:KIN''''1。我认为我下面的示例代码(假设您正在为 .NET 编写代码)可以处理这个问题。
标签: sql-server vb.net sql-server-2008