Questions tagged «scripting»

对于有关生成或使用语言脚本的问题,例如,编写数据库对象定义的脚本。

5
SQL Server 2012:从命令行生成脚本
我正在运行SQL Server 2012。 SQL Server Management Studio可以选择右键单击数据库,然后选择“任务”和“生成脚本”。 有没有一种方法可以通过命令行以某种方式使其自动化? 我想创建一个包含整个数据库的架构和数据的脚本。 之类的工具ScriptDB,并sqlpubwiz.exe似乎都针对SQL Server 2005的什么有关SQL Server 2012?

3
替代字符串或执行过程以防止SQL查询代码重复的替代方法?
免责声明:作为一个只使用数据库的人,请耐心等待。(大多数时候,我会在工作中进行C ++编程,但是每个奇数月我都需要在Oracle数据库中搜索/修复/添加某些内容。) 我一再需要编写复杂的SQL查询,无论是针对临时查询还是针对应用程序内置的查询,其中大部分查询只是重复的“代码”。 用传统的编程语言编写此类可憎的代码会给您带来深重的麻烦,但是我(I)尚未找到任何体面的技术来防止SQL查询代码重复。 编辑: 1,我要感谢对我的原始示例进行了出色改进的回答者。但是,这个问题与我的示例无关。这是关于SQL查询中的重复性。这样,到目前为止的答案(JackP,Leigh)在显示可以通过编写更好的查询来减少重复性方面做得很好。但是即使如此,您仍然面临着一些重复性,这些重复性显然无法消除:这总是使SQL困扰我。在“传统”编程语言中,我可以进行大量重构以最大程度地减少代码中的重复性,但是对于SQL,似乎没有(?)工具允许这样做,除了以重复的方式编写较少的语句。 请注意,我再次删除了Oracle标记,因为如果没有数据库或脚本语言可以支持更多功能,我将非常感兴趣。 这是我今天拼凑而成的一颗宝石。它基本上报告单个表的一组列中的差异。请略读以下代码,特别是。最后是大型查询。我将在下面继续。 -- -- Create Table to test queries -- CREATE TABLE TEST_ATTRIBS ( id NUMBER PRIMARY KEY, name VARCHAR2(300) UNIQUE, attr1 VARCHAR2(2000), attr2 VARCHAR2(2000), attr3 INTEGER, attr4 NUMBER, attr5 VARCHAR2(2000) ); -- -- insert some test data -- insert into TEST_ATTRIBS values ( …

3
从客户端检查与SQL Server的连接的简便方法
为了进行故障排除,我希望能够检查客户端是否可以连接到SQL Server实例,而与可能无法连接到SQL Server的应用程序无关。 是否有一种简单的方法(即不必安装第三方软件)使用默认的Windows系统工具来执行此操作?也许使用脚本或网络应用程序?

6
Redgate SQL Compare与Visual Studio 2010 Premium / Ultimate数据库项目
我目前使用的是Visual Studio Professional Edition,它具有数据库项目作为项目模板,但是它的某些功能不可用,例如Schema Compare tool。架构比较和数据库更新脚本生成仅在Visual Studio 2010 Premium / Ultimate版本中可用。 但是,Visual Studio中的模式比较和更新脚本生成功能是否像Redgate SQL Compare工具中那样丰富?(我也没有使用过)我没有找到功能比较列表。谁同时使用了这两个工具,有谁能帮助说清楚?

1
用户共享的查询:动态SQL与SQLCMD
我必须重构和记录许多foo.sql查询,这些查询将由数据库技术支持团队共享(针对客户配置等)。每个客户都有自己的服务器和数据库的票证类型经常出现,但其他方面的架构是相同的。 当前无法选择存储过程。我正在讨论是使用动态还是使用SQLCMD,因为我在SQL Server上有些新手,所以我也没有使用太多。 我觉得SQLCMD脚本对我来说绝对看起来更“干净”,并且更易于阅读和根据需要对查询进行较小的更改,但同时也迫使用户启用SQLCMD模式。由于使用字符串操作编写查询会导致语法高亮丢失,因此动态处理更加困难。 这些正在使用Management Studio 2012(SQL版本2008R2)进行编辑和运行。每种方法的优缺点是什么,或者一种方法或另一种方法的某些SQL Server“最佳实践”是什么?其中一个比另一个更“安全”吗? 动态示例: declare @ServerName varchar(50) = 'REDACTED'; declare @DatabaseName varchar(50) = 'REDACTED'; declare @OrderIdsSeparatedByCommas varchar(max) = '597336, 595764, 594594'; declare @sql_OrderCheckQuery varchar(max) = (' use {@DatabaseName}; select -- stuff from {@ServerName}.{@DatabaseName}.[dbo].[client_orders] as "Order" inner join {@ServerName}.{@DatabaseName}.[dbo].[vendor_client_orders] as "VendOrder" on "Order".o_id = "VendOrder".vco_oid where …

3
以自动化方式编写Oracle DDL脚本
Oracle SQL Developer能够通过Tools -> Database Export...此方式导出DDL,效果很好,但是需要手动干预。 我知道DBMS_METADATA.get_ddl(),但是发现导出并不完美。我遇到的问题是,导出的DBMS_METADATADDL如果不首先解决诸如关键字中间的中断以及更糟糕的问题之类的问题就无法使用。但是,如果任何人都知道DMBS_METADATA可以通过导出导出DDL的方法而无需手动修复,那也将是一个很好的解决方案。 基本上,我正在寻找一种自动/可脚本化的方式来导出DDL ,该方式与通过手动方式导出的方式相同。 我怎样才能做到这一点?

1
SQL Server / T-SQL是否支持行连续以拆分长字符串?
有时我的SQL脚本包含一个或多个超长(有时甚至是愚蠢的长)字符串。通常,这些是VARBINARY表示文件/程序集的文字/常量,但有时它们是文本。 字符串很长的主要问题是某些文本编辑器不能很好地处理它们。例如,我有一个VARBINARY我在CREATE ASSEMBLY [AssemblyName] FROM 0x....语句中使用的文字,而程序集本身的大小刚好超过1 MB,相当于文本文件中的刚好超过200万个字符,因为每个字节都需要用十六进制表示法表示两个字符(例如0x1F= a 1和an F)。SQL Server Management Studio(SSMS)不能很好地处理此问题,并且在我尝试滚动浏览该行时挂起了几秒钟。实际上,某些版本(不确定是否还会发生这种情况)甚至在打开脚本时会显示关于长行的警告,该脚本的长度至少有一行。 第二个问题是,在没有启用自动换行功能的编辑器中使用或在线发布时,会使格式复杂化。这里的问题是,水平滚动条的滑块非常狭窄,即使将其稍微移动通常也会使非超长文本滚动到视线之外。 现在,T-SQL不再使用换行符甚至分号来终止命令(尽管从SQL Server 2005开始,分号是首选/推荐的分号)。因此,由于SQL Server知道如何解析每个语句以使其知道何时结束,因此似乎将长行拆分为仅由newline/ carriage-return+ 分隔的多行line-feed似乎不是不合理的。但这两种情况都不起作用。 PRINT 'Line1 Line2'; 返回(在“消息”标签中): Line1 Line2 这很有意义,因为换行符位于文字/常量内。但是,对于a执行此操作VARBINARY也不起作用。 PRINT 0x1234 5678; 给我一个错误。

4
在列上放置约束(索引)
如何修改具有索引的表的类型?我试图在一个空表上做一个alter列,以将类型从日期时间修改为varchar(15),并收到错误消息说它对列有依赖性(原来是索引)。 通过右键单击索引并编写脚本脚本,可以轻松地在本地解决此问题,但需要在无法访问索引名称的其他服务器上进行扩展。 有没有办法使脚本删除所有索引,让我在列上更改数据类型,然后读取索引?谢谢!

5
更改架构后如何检测损坏的存储过程?
我已经在数据库中修改了一个中央表,并且sp_depends确实返回了数百个结果,而且我担心其中的一些存储过程在更改后可能无法再编译。 检查一个存储过程很容易(我只是重新运行alter脚本,然后查看操作是否成功),但是在100多个过程中执行此操作比较麻烦。 我知道我可以使用像这样的脚本来重新编译数据库中的所有对象,但是实际操作将在下一次执行存储过程时发生,而不是立即执行,因此对于我来说似乎不合适。 我还以为我可以完全删除所有存储过程,并使用源代码控制系统重新同步数据库,但是该选项虽然可行,但却不是一个很好的选择。有更好的方法吗? 我正在使用SQLServer 2008 R2,我的数据库脚本存储在VS 2008数据库项目中。 需要澄清的是,我并不是在主张应该完全依靠这种方法来测试代码。就像在C#中一样,您在编写代码时会立即检测其他依赖文件中的语法错误(然后使用其他策略进行测试,例如单元测试,通常速度要慢几个数量级),我认为检测SQL依赖关系很有意义错误只需几秒钟即可完成,而不必运行通常需要几个小时才能完成的完整功能测试。


1
在SQLCMD中执行从SSMS生成的TSQL脚本。报价失败
我正在尝试通过执行SQL Server Management Studio中“生成脚本”工具生成的脚本来将数据库部署到计算机上。 这是我发出的命令: sqlcmd -S LOCALHOST\sqlexpress -I -U user -P ******** -i C:\Rollouts\NI-9-25-2012_10-42-AM\Rollout.sql > rolloutlog.txt 我收到这样的错误: Sqlcmd:错误:文件'C:\ Rollouts \ NI-9-25-2012_10-42-AM \ Rollout.sql'中命令'''附近第39488行的语法错误。 当我使用文本编辑器查看此行时,所有符号都指向带引号的问题。 有问题的行如下所示: $(''。cat-menu-new'')。slideDown(''slow''); 是否应该执行或生成脚本以支持脚本中的引号的开关?

1
SQL * Plus,@和相对路径
某种程度上,似乎似乎SQL * Plus(至少在Windows上)在用调用@@以及路径以单点或双点开头时无法找到具有相对路径的脚本。 例如,在x:\some\where下面,我具有以下目录结构: script.sql main-dir\main-sub-dir call-script.sql script.sql 也就是说:两个,script.sql但位置不同。 script.sql正下方的内容x:\some\where很简单 prompt SCRIPT root 而对方script.sql的内容是 prompt SCRIPT main-dir/main-subdir call-script.sql 读 @@script.sql @ script.sql 预期产量 如果我从中启动SQL * Plus x:\some\where,然后执行 @main-dir/main-sub-dir/call-scripts 输出将是 SCRIPT main-dir/main-subdir SCRIPT root 这是预料之中的,因为该单曲@应该从SQL * Plus的起始位置@@搜索路径,并且应该从包含脚本的目录中搜索路径。 意外的输出 现在,如果我更改为call-scripts.sql: @@./script.sql @ ./script.sql double @@似乎改变了它的行为,因为它从SQL * Plus的起始位置搜索路径,现在输出为 SCRIPT root SCRIPT root 这不是我所期望的。 …

2
是否有可以帮助SQL Server维护任务的PowerShell脚本集合?
我一直在研究PowerShell,并且一直(慢慢地)将其纳入我的日常DBA任务中。 到目前为止,我已经看到了许多用于许多不同管理活动的断开连接的PowerShell脚本。 我想知道的是,是否存在人们通常要去的官方(或可识别的)PowerShell脚本集合或存储库,以获取用于常见DBA活动的SQL Server PowerShell脚本(例如Ola Hallengren的T-SQL脚本)。


2
使用哈希密码为应用程序角色编写脚本
我需要使用哈希密码编写应用程序角色脚本,以便将其从一个数据库复制到另一个数据库。 请考虑以下示例代码,该代码使用应用程序角色为非信任用户提供提升的访问权限: USE tempdb; CREATE LOGIN LimitedLogin WITH PASSWORD = 'Password1' , CHECK_POLICY = OFF , CHECK_EXPIRATION = OFF; CREATE USER LimitedLogin FOR LOGIN LimitedLogin WITH DEFAULT_SCHEMA = dbo; CREATE APPLICATION ROLE MyAppRole WITH PASSWORD = 'Password2' , DEFAULT_SCHEMA = dbo; EXEC sp_addrolemember @rolename = 'db_datareader' , @membername = 'MyAppRole'; …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.