Unix Sybase isql赢得';使用DB GO时不执行sql文件
我在uDeploy上创建这个进程,它使用iSQL执行sql文件。我的问题是,我必须在这个过程中设置服务器和数据库名称 在SQL文件中-我们可能需要使用其他数据库,因此必须在文件中包含use DBNAME GO 但是,它没有在USE语句之后到达/执行update语句 是否有任何与sybase、isql相关的东西不允许这样做? 您只能从isql执行一条语句吗 正在运行的典型linux cmd是Unix Sybase isql赢得';使用DB GO时不执行sql文件,unix,sybase,isql,udeploy,Unix,Sybase,Isql,Udeploy,我在uDeploy上创建这个进程,它使用iSQL执行sql文件。我的问题是,我必须在这个过程中设置服务器和数据库名称 在SQL文件中-我们可能需要使用其他数据库,因此必须在文件中包含use DBNAME GO 但是,它没有在USE语句之后到达/执行update语句 是否有任何与sybase、isql相关的东西不允许这样做? 您只能从isql执行一条语句吗 正在运行的典型linux cmd是 sybase.sh; isql -U username -P **** -S servername:por
sybase.sh; isql -U username -P **** -S servername:port -D dbname -X -i sqlfile.sql
SQL文件示例:
USE dbname
go
update table set field = 'date' where field1 ='blahblah' and field2 ='blah'
go
编辑:
这可能是因为命令中正在设置DBNAME。有人能证实吗?一些背景:
从命令行:
isql -U ... -P ... -D >dbname< -i >script<
- 由于在
命令行上没有提供isql
参数,因此在运行-D
select
-D
标志
$ isql -S ... -U ... -P ... -D master -i myquery.sql
- 而
命令行选项isql
将首先将会话放置在-D master
数据库中master
- 脚本将通过将您置于
数据库中来覆盖这一点tempdb
- 最终结果是
将在select
数据库中运行tempdb
dbname
=dbname
,因此这两个示例都应该在名为dbname
的数据库中运行查询。。。假设您的登录名可以访问名为dbname
的数据库;我假设你有不同名称的数据库。。。在这种情况下,我已经解释了一个可能的问题(请参见下面的答案),如果isql/-D>dbname<和use>dbname<是相同的,那会怎么样?没关系<首先应用代码>isql/-D,然后应用使用
(即,使用
覆盖isql/-D
)
$ myquery.sql
use tempdb
go
select count(*) from sysobjects
go
$ isql -S ... -U ... -P ... -i myquery.sql
$ isql -S ... -U ... -P ... -D master -i myquery.sql