l33*_*33t 3 sql sql-server patch runtime
运行SQL Server 2005.一个软件与我们的数据库集成.不幸的是,他们选择直接进行SQL查询而不是使用存储过程.现在我们已经更改了我们的数据库方案,并且有问题的查询不再有效.
是否可以在SQL Server上运行时修补T-SQL?
例如,当SQL Server获取SELECT A FROM InvalidTable特定数据库时,查询将SELECT A FROM ValidTable在执行之前转换为.
编辑: 这是有问题的查询:
SELECT * FROM DataTable c JOIN Users u ON u.UserName = @P0 AND c.DepartmentID = b2.DepartmentID WHERE c.Status = 0哪里DepartmentID搬到了另一张桌子!
您可以使用视图和同义词来隐藏架构更改.
因此,对于简单的事情(如InvalidTable现在ValidTable),您可以定义同义词
CREATE SYNONYM InvalidTable FOR CorrectSchema.ValidTable;
Run Code Online (Sandbox Code Playgroud)
对于更复杂的事物(列,JOIN,表拆分,数据类型等),您需要一个视图
CREATE VIEW InvalidTable
AS
SELECT
col1, col2,
CAST(col3 AS varchar(1000)) AS col3, -- fix data type
1 AS col4 -- not used now, but expected in legacy calls
FROM
CorrectSchema.ValidTable
WHERE
col5 = 'Something'
GO
Run Code Online (Sandbox Code Playgroud)
编辑,在OP意识到他们自己搞砸了之后
如果在同一数据库中存在具有相同名称的表,则不能拥有视图或同义词.
因此,使用另一个数据库并使遗留应用程序使用它.在这些示例中,您可以在另一个数据库中使用DataTable,并假设您可以使用另一个不使用更改代码的数据库
USE legacyDB
GO
CREATE VIEW DataTable
AS
SELECT
*
FROM
CorrectDB.CorrectSchema.ValidTable V
JOIN
CorrectDB.CorrectSchema.OtherTable O ON ...
GO
Run Code Online (Sandbox Code Playgroud)
否则,重命名正确的数据库并将所有非遗留代码指向重命名的数据库.
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |