【问题标题】:Execute a literal string as a SQL statement - placement of single quotes将文字字符串作为 SQL 语句执行 - 放置单引号
【发布时间】:2016-08-09 19:08:55
【问题描述】:

我有以下 SQL 字符串通过链接服务器从 ODBC 进度数据库中提取数据。 此查询运行良好。

SELECT * 
INTO [TABLE] 
FROM 
OPENQUERY
(
"ODBC DRIVER",
'SELECT CAST(SCHEMA."AB_ACCESSIBILITY"."ACCESS_CODE" AS VARCHAR(20)) AS "ACCESS-CODE"
,CAST(SCHEMA."AB_ACCESSIBILITY"."DESCRIPTION" AS VARCHAR(60)) AS "DESCRIPTION"
,CAST(SCHEMA."AB_ACCESSIBILITY"."ORG_CODE" AS VARCHAR(16)) AS "ORG_CODE"
,CAST(SCHEMA."AB_ACCESSIBILITY"."POINTS" AS INT) AS "POINTS" 
FROM SCHEMA."AB_ACCESSIBILITY" with (nolock)'
)

但是,我想将其转换为文字字符串,以便可以使用exec sp_executesql 从存储过程中执行它。

但是,我无法正确放置撇号,以便 exec sp_executesql 可以将其作为格式正确的 SQL 语句读取。

有人可以告诉我在上述语句的何处添加额外的撇号,以便它可以与 exec sp_excutesql 一起使用吗?

谢谢!

为清晰起见进行编辑:

  1. With (nolock) 适合以上情况

  2. 上面的目的是循环列表中的多个 SQL 语句以从 Progress DB 导入数据。

【问题讨论】:

  • 稍微绕道...我注意到您在这里使用了 NOLOCK 提示。您对随机丢失和/或重复的行感到满意吗?换句话说,如果您的查询大部分时间都是准确的,是否可以?您可能需要阅读一些关于该提示的信息,以确保您完全理解它。 blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere
  • 为什么你认为你需要将它作为动态 sql 运行?
  • @SeanLange 谢谢 - 为清楚起见更新了主要问题
  • 我认为@Sean 关于使用NOLOCK 提示的问题是修辞的。 :)
  • 我对 NOLOCK 的看法是因为在我的职业生涯中,我看到它一遍又一遍地说“脏读没问题”,而那个人却不明白它比这更险恶。

标签: sql sql-server stored-procedures openquery


【解决方案1】:

看起来你只需要用''转义'字符

SELECT * 
INTO [TABLE] 
FROM 
OPENQUERY
(
"ODBC DRIVER",
''SELECT CAST(SCHEMA."AB_ACCESSIBILITY"."ACCESS_CODE" AS VARCHAR(20)) AS "ACCESS-CODE"
,CAST(SCHEMA."AB_ACCESSIBILITY"."DESCRIPTION" AS VARCHAR(60)) AS "DESCRIPTION"
,CAST(SCHEMA."AB_ACCESSIBILITY"."ORG_CODE" AS VARCHAR(16)) AS "ORG_CODE"
,CAST(SCHEMA."AB_ACCESSIBILITY"."POINTS" AS INT) AS "POINTS" 
FROM SCHEMA."AB_ACCESSIBILITY" with (nolock)''
)

【讨论】:

  • 感谢乔的上述介绍
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
  • 2020-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多