0

我正在使用 iSQL 执行 sql 文件的 uDeploy 上创建此过程。我的问题是我必须在过程中设置服务器和数据库名称。

在 SQL 文件中 - 我们可能需要使用其他数据库,因此它必须在文件中包含 USE DBNAME GO。

但是,它没有在 USE 语句之后到达/执行更新语句。

是否有任何与 sybase、isql 相关的东西不允许这样做?您只能从 isql 执行一条语句吗?

正在运行的典型 linux cmd 是

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。任何人都可以确认吗?

4

1 回答 1

1

一些背景:

从命令行:

isql -U ... -P ... -D >dbname< -i >script<
  • >script<在名为的数据库中运行>dbname<(假设您的登录名可以访问该>dbname<数据库;否则脚本将在您的登录名的默认数据库中运行)

在脚本中:

use >dbname<
go
select ...
go
  • 假设您的登录名可以访问数据库>dbname<...
  • 将会话放置在数据库名称中>dbname<并...
  • 然后运行您的查询
  • 如果您无权访问>dbname<数据库,那么您应该会收到一条错误消息,并且后续查询将在您的默认数据库中运行

您的(可能的)问题:

  • isql / -D >dbname<将设置目标数据库...
  • 脚本中use >dbname<的 将优先并在运行后续查询之前确定您最终放置在哪个数据库中

一个例子 ...

$ myquery.sql
use tempdb
go
select count(*) from sysobjects
go

$ isql -S ... -U ... -P ... -i myquery.sql
  • 由于命令行-D上没有提供任何参数isql,因此脚本会在运行之前将您放入tempdb数据库中select

现在如果我们添加一个-D标志......

$ isql -S ... -U ... -P ... -D master -i myquery.sql
  • isql命令行选项-D master最初会将您的会话放在master数据库中......
  • 该脚本将覆盖它,然后将您放入tempdb数据库中
  • 最终结果是select将在tempdb数据库中运行
于 2017-12-01T17:15:35.213 回答