标签: scripting

SQL Server - 必须是查询批处理中的第一条语句 - 是什么以及为什么?

我找不到创建时命令必须是查询批处理中的第一条语句的对象类型列表。到目前为止,我发现 function/stored_procedure/view 必须是第一个。

有谁知道为什么需要这样做?我确定有一个很好的理由,但它逃脱了我。想到存储过程的唯一原因是过程结束后对代码的奇怪解释。当 SP 被调用时,SQL 服务器仍然执行代码,如果有更多的 CREATE STATEMENTS 结果会一团糟。

背景:我正在尝试创建创建/删除/禁用/启用等脚本,并且需要知道在执行之前将什么放入动态 exec() 中。是的,我可能会将所有语句都包装在 exec() 中,但是我不会学到任何东西。

sql-server scripting

7
推荐指数
1
解决办法
2万
查看次数

恢复所有数据库脚本

我正在将 SQL Server DB 迁移到新实例。

有人告诉我,可以从系统目录中的可用备份动态构建 RESTORE 脚本。

有谁知道一个示例脚本来做到这一点?

谢谢!

sql-server scripting restore catalogs automation

7
推荐指数
1
解决办法
1万
查看次数

如何将多个语句传递到 sqlcmd?

想要自动化一些任务而不是为所有事情启动 SSMS,我正在尝试编写一个批处理文件来运行这些语句,当我将它们粘贴到 sqlcmd 提示符中时,它可以完美地工作。他们只是检查镜像状态,暂停镜像,然后再次检查状态。(为了最大限度地减少依赖性并简化从一台服务器到另一台服务器的迁移,我想将所有命令保存在一个文件中。)

select cast(DB_NAME(database_id) as char(30)),
        cast(mirroring_state_desc as char(15))
from sys.database_mirroring
where mirroring_state_desc is not null;
go;

ALTER DATABASE db1 SET PARTNER SUSPEND;
ALTER DATABASE db2 SET PARTNER SUSPEND;
go;

select cast(DB_NAME(database_id) as char(30)),
        cast(mirroring_state_desc as char(15))
from sys.database_mirroring
where mirroring_state_desc is not null;
go;
Run Code Online (Sandbox Code Playgroud)

所以,我写了这个批处理文件:

SETLOCAL ENABLEDELAYEDEXPANSION
SET @SQLSTRING=select cast(DB_NAME(database_id) as char(30)), ^
        cast(mirroring_state_desc as char(15)) ^
from sys.database_mirroring ^
where mirroring_state_desc is not null; ^
go ^
^
ALTER DATABASE MSCRM_CONFIG SET PARTNER SUSPEND; ^
ALTER …
Run Code Online (Sandbox Code Playgroud)

scripting t-sql sqlcmd sql-server-2012

7
推荐指数
1
解决办法
1万
查看次数

如何为所有登录/用户/表/架构编写权限脚本

多年来,我使用了无数脚本和应用程序来生成 SQL Server 数据库的所有权限。我使用过付费和免费工具。我觉得没有一个似乎在每种情况下都是准确的。我只是在寻找一种方法来为给定的数据库生成所有权限,同时确信脚本是正确的并且能够在从另一个实例备份/恢复后使用。有没有人有他们有信心并经常使用的方法

sql-server permissions scripting

7
推荐指数
2
解决办法
1万
查看次数

postgres 创建可以选择表和这些表的列的有限用户

我有一个应用程序,可以自动创建 PostgreSQL 数据库,还可以自动创建数据库用户。出于安全目的,该数据库用户被授予有限的访问权限,因为它将被移交给客户端使用。 我使用的版本是Postgres 9.6

CREATE USER %USERSETUP% WITH
    LOGIN PASSWORD '%USERSETUPPASS%'
    NOSUPERUSER
    NOCREATEDB
    NOCREATEROLE
    INHERIT
    NOREPLICATION
    CONNECTION LIMIT -1;

ALTER DEFAULT PRIVILEGES IN SCHEMA %SCHEMA% GRANT INSERT, SELECT, UPDATE, DELETE, REFERENCES ON TABLES TO %USERSETUP%;
Run Code Online (Sandbox Code Playgroud)

现在,我的测试还进入创建的数据库,并验证它是否已正确创建,使用查询脚本获取表名称,然后获取每个表内的列名称(作为奖励,还获取列数据类型

由于这些权限,用户无法使用 information_schema。 另外,我只请求带有 SYSTEM CATALOG 的查询脚本

我的表名脚本有效:

SELECT tablename FROM pg_catalog.pg_tables where schemaname = '{schema}'
Run Code Online (Sandbox Code Playgroud)

这将表名称作为列表返回:

业务、位置、人员、客户等...

但是,当我运行以下两个脚本来获取列名称时,我得到的返回值为 0,就好像该用户正在尝试查询 information_schema 一样。我猜这是因为特权:

SELECT c.oid,
  n.nspname,
  c.relname
FROM pg_catalog.pg_class c
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relname ~ 'schemaaryzdhyqoi'
  AND …
Run Code Online (Sandbox Code Playgroud)

postgresql permissions scripting users postgresql-9.6

7
推荐指数
1
解决办法
6136
查看次数

如何将整个数据库备份到文本文件

如果它很愚蠢并且有效,那它仍然是愚蠢的。

关于 GDPR 的喧嚣让我思考 - 如果您必须进行备份并修改/删除数据,您会怎么做?破解打开 .bak 文件对我来说听起来很难。但是打开一个 .txt 文件很容易。

我可以将我的数据库备份到文本文件中,从而更轻松地从备份中删除历史记录吗?

sql-server backup export scripting

7
推荐指数
1
解决办法
2642
查看次数

如何管理我自己的脚本

每个管理员、开发人员都有自己的脚本集合(一些模式)。他们有时会被解雇一份工作,而他们又受雇于另一份工作。有没有好的、好用的、有索引的工具来收集常用的sql脚本(默认结构化文件夹/文件系统)?

best-practices scripting

6
推荐指数
1
解决办法
432
查看次数

如何将单个结果存储在变量中并在查询(Oracle)中重用?

我有一个类似的查询

SELECT id FROM xyz WHERE ...;
Run Code Online (Sandbox Code Playgroud)

它有一个或多或少复杂的 WHERE 子句,并正好返回一列(ID)的一行。我需要此 ID 用于脚本中的多个后续查询。所以我的目标是在一个变量中重用这个结果,但我没有找到一个有效的解决方案。

在这种情况下,加入此查询不是一个好的选择。那么是否有可能告诉 Oracle 将这个单个结果存储在一个变量中并使用这个变量来构建新的查询——明确地在其他查询的条件子句中使用?

如果是这样,也许有人可以发布一个简单的示例-最简单的可能是……。喜欢

SELECT :VARIABLE FROM DUAL
Run Code Online (Sandbox Code Playgroud)

oracle oracle-11g-r2 plsql scripting

6
推荐指数
1
解决办法
8万
查看次数

如何使用脚本为 PostgreSQL 数据库设置密码?

在我正在编写的 bash 脚本中,我需要创建一个数据库并设置一个由我的脚本自动生成的密码。

问题是我找不到在没有用户交互的情况下设置密码的方法。

我需要这样的东西:

$ createdb mydb -p $(cat password_file)
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

postgresql linux scripting

6
推荐指数
2
解决办法
7395
查看次数

Sqlcmd:无效参数 - 尝试将变量传递给 sqlcmd 时

我正在尝试在 Server 2012R2 上使用 DOS 命令提示符来运行包含以下内容的批处理。我想运行一个 SQL 命令 (sqlcmd) 并将结果返回到命令窗口。

这就是我目前正在尝试的,但 sqlcmd 不断抛出Sqlcmd: 'test': Invalid argument. Enter '-?' for help.20:56:08.

FOR /F "tokens=* USEBACKQ" %%F IN (`sqlcmd -S localhost -E -i "backup.sql" -v dbname="test"`) DO (
    Echo %%F
)
Run Code Online (Sandbox Code Playgroud)

但是,如果我在没有参数/变量的情况下尝试它,它会完美运行!

FOR /F "tokens=* USEBACKQ" %%F IN (`sqlcmd -S localhost -E -i "backup.sql"`) DO (
    Echo %%F
)
Run Code Online (Sandbox Code Playgroud)

有没有人知道使用 sqlcmd、DOS CMD 以及 FOR /F 循环(例如在我的第一个示例中)将变量传递给我的 sql 查询的方法?

scripting sql-server-2016

6
推荐指数
1
解决办法
2661
查看次数