- 我会阅读 Andy 关于“数据库测试驱动开发”的博客。
http://sqlblog.com/blogs/andy_leonard/archive/2012/08/07/revisiting-test-driven-database-development.aspx
2. 我会以幂等的方式编写每个脚本。在计算中,幂等操作是指使用相同的输入参数多次调用它时不会产生额外影响的操作。
3. A. 让第三方供应商在运行脚本时向您发送 SSMS 屏幕的“文本输出”或 B. 使用 sqlcmd.exe,并使用日志记录功能,并要求他们向您发送 .log文件。
-o 输出文件
http://msdn.microsoft.com/en-us/library/ms162773.aspx
这是一个“幂等”的 .sql 文件。如果 dbo.Employee.LastName 列最初是 64 个字符,则此脚本会更改它。更改为“不存在”(并删除 CHARACTER_MAXIMUM_LENGTH 检查)以创建以前不存在的任何列(这是我 99% 的脚本在已经“服务”的数据库上的样子)。还要注意变量的 sqlcmd“占位符”。但是我可以运行下面的脚本 1 次或 333 次,结果是一样的。
Use [$(DBNAME)]
GO
:Error $(ErrorOutputFileFromCommandLine)
IF EXISTS ( SELECT TABLE_SCHEMA , TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Employee' and TABLE_SCHEMA = 'dbo' )
BEGIN
IF EXISTS
(
SELECT *
FROM [INFORMATION_SCHEMA].[COLUMNS]
WHERE
TABLE_NAME = 'Employee'
AND TABLE_SCHEMA = 'dbo'
AND COLUMN_NAME = 'LastName'
AND CHARACTER_MAXIMUM_LENGTH < 128
)
BEGIN
print 'Altering the column dbo.Employee.*LastName*'
ALTER TABLE [dbo].[Employee]
ALTER COLUMN [LastName] varchar(128) NOT NULL;
END
ELSE
BEGIN
print 'The column dbo.Employee.*LastName* already exists and supports 128 characters.'
END
END
GO