我正在编写一个需要在许多不同的SQL服务器上运行的脚本。其中一些,共享相同的结构,换句话说,它们是相同的,但文件组和数据库名称是不同的。这是因为每个客户一个。
无论如何,我想在运行脚本时,如果我选择了错误的数据库,就不应该执行它。我试图保持一个干净的DB。这是我的例子,它只适用于删除视图(如果存在),但不适用于创建新视图。我也想知道如何创建存储过程。
IF EXISTS (SELECT *
FROM dbo.sysobjects
WHERE id = object_id(N'[dbo].[ContentModDate]')
AND OBJECTPROPERTY(id, N'IsView') = 1)
AND CHARINDEX('Content', DB_NAME()) > 0
DROP VIEW [dbo].[ContentModDate]
GO
IF (CHARINDEX('Content', DB_NAME()) > 0)
BEGIN
CREATE VIEW [dbo].[Rx_ContentModDate] AS
SELECT 'Table1' AS TableName, MAX(ModDate) AS ModDate
FROM Tabl1 WHERE ModDate IS NOT NULL
UNION
SELECT 'Table2', MAX(ModDate) AS ModDate
FROM Table2 WHERE ModDate IS NOT NULL
END
END
GO
答案 0 :(得分:3)
存储过程完全相同。
我也这样做,因为上面的代码不起作用。 CREATE xxxx通常必须首先在批处理中。您的代码也会找到名为“ContentFoo”的数据库
IF OBJECT_ID('dbo.myView') IS NOT NULL AND DB_NAME() = 'Content'
DROP VIEW [dbo].[ContentModDate]
GO
IF DB_NAME() = 'Content'
EXEC ('
CREATE VIEW [dbo].[Rx_ContentModDate] AS
SELECT ''Table1'' AS TableName, MAX(ModDate) AS ModDate
FROM Table1 WHERE ModDate IS NOT NULL
UNION
SELECT ''Table2'', MAX(ModDate) AS ModDate
FROM Table2 WHERE ModDate IS NOT NULL
')
注意:视图名称是不同的吗?