1

我需要获取我正在为其构建动态查询的表的 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' 后面的非闭合引号。

那么,谁能告诉我解决这个问题的最佳方法?

4

2 回答 2

2

通过加倍来转义单引号: KIL'1变为KIL''1.

如果一个字符串已经有相邻的单引号,两个变成四个,或者四个变成八个......它可能有点难以阅读,但它有效:)

使用 .NET 中的字符串方法,您的语句可能是:

sGetSchemaCommand = String.Format("SELECT (SELECT TOP 1 [{0}] FROM [{1}]) AS TOP_PK, IDENT_CURRENT('[{2}]') AS CURRENT_IDENT, IDENT_INCR('[{2}]') AS IDENT_ICREMENT, IDENT_SEED('[{2}]') AS IDENT_SEED", pPrimaryKey, pTableName, pTableName.Replace("'","''"))


编辑: 请注意,字符串替换现在在新的第三个替换字符串上。(我已经取出了字符串替换pPrimaryKey,以及第一次出现的pTableName。)所以现在,当单引号在其他单引号内时,它们只会加倍。

于 2013-11-08T12:51:45.253 回答
0

您需要将每个单引号替换为两个单引号http://beyondrelational.com/modules/2/blogs/70/posts/10827/understanding-single-quotes.aspx

于 2013-11-08T12:51:43.790 回答