首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要sqsh来忽略美元符号

需要sqsh来忽略美元符号
EN

Stack Overflow用户
提问于 2013-07-19 19:58:04
回答 2查看 698关注 0票数 0

环境: Solaris 10,/bin/sh脚本使用sqsh和freetds与MS对话

(TLDR)问题:我需要sqsh忽略一个美元符号并将其传递给MS。

背景:我正在编写一些动态构建SQL以更改现有索引的代码,但是当它运行时,我会得到错误:

代码语言:javascript
复制
Msg 2727, Level 11, State 1
Server 'HOST\SERVER', Line 1
Cannot find index 'foo'.

我四处搜索,发现没有名为foo的索引,但有一个名为foo$bar的索引。

内置的SQL输入看起来很好.

代码语言:javascript
复制
% grep 'foo' input.sql
alter index [foo$bar] on ...

通过新查询会话或第三方应用程序运行此SQL的...and成功。然而,当通过sqsh时,结果并没有超过这个美元符号:

代码语言:javascript
复制
% sqsh -e -i input.sql -o output.sql
% grep 'foo' output.sql
1> alter index [foo] on ...

...which建议将$bar解释为一个变量或什么的。

有人知道如何让sqsh逃脱一个美元的标志或允许一个通过?我试过各种引号和反斜杠的组合。

帮帮我,堆积如山。你是我唯一的希望。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-19 20:46:07

第5页的参考手册指出:“请注意,为了防止变量的扩展,可以使用单引号或两个单引号,例如:

代码语言:javascript
复制
1> \echo \\$name
$name

因此,为了防止sqsh用空字符串替换$bar,您必须编写如下内容:

代码语言:javascript
复制
alter index [foo\\$bar] on ...
alter index ['foo$bar'] on ...

要测试它,您可以先尝试选择'foo\\$bar' = 1或其他类似的方法。

票数 1
EN

Stack Overflow用户

发布于 2013-10-12 16:28:02

另一种选择是通过执行以下命令完全禁用缓冲区扩展:

代码语言:javascript
复制
\set expand=0

在sqsh提示符上,或在.sqshrc文件中指定此命令,或使用参数启动sqsh。

代码语言:javascript
复制
sqsh -e -i input.sql -o output.sql -Lexpand=0

如果展开是打开的(默认),那么sqsh将用其内容替换变量$bar。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17754492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档