Sql server 将Oracle存储过程转换为SQL Server过程
我已经在oracle中创建了一个存储过程。现在,我需要将相同的过程转换为SQL Server过程。由于我不擅长SQL程序,请帮助我 以下是Oracle的过程:Sql server 将Oracle存储过程转换为SQL Server过程,sql-server,oracle,stored-procedures,Sql Server,Oracle,Stored Procedures,我已经在oracle中创建了一个存储过程。现在,我需要将相同的过程转换为SQL Server过程。由于我不擅长SQL程序,请帮助我 以下是Oracle的过程: 此过程将从数据库中获取以“FULLTEXTLOOKTABLE”开头的所有表。该表有4个列(ID(int)、FullTextDetails(nvarchar)、Regex(nvarchar)、MinMatchCount(int))。对于每个表,它将采用“FullTextDetails”列的值,删除所有特殊字符,并采用 "Regex" an
此过程将从数据库中获取以
“FULLTEXTLOOKTABLE”
开头的所有表。该表有4个列(ID(int)、FullTextDetails(nvarchar)、Regex(nvarchar)、MinMatchCount(int))
。对于每个表,它将采用“FullTextDetails”
列的值,删除所有特殊字符,并采用
"Regex" and replace
([\~\-]) with ([\~\-])?
(\!) with (\!)?
([\@]) with ([\@])?
(\#) with (\#)?
([\$s\&]) with ([\$s\&])?
(\%) with (\%)?
(\^) with (\^)?
并用新值更新列
“FullTextDetails”和“Regex”
。最后更改被提交。这里最困难的事情是如何处理regex替换,因为在T-SQL中没有这样的内置函数。幸运的是,您可以使用SQL CLR集成实现我所展示的功能—基本上,您可以编写.net
对象,将它们映射到SQL
对象并使用它们。你需要努力,但那是你唯一的机会
然后,其他事情就很简单了。从该系统对象,您可以获取并循环表名:
SELECT *
FROM [sys].[tables];
您可以使用游标
,但我更愿意跳过它们。它将是这样的:
DECLARE @Tables TABLE
(
[name] SYSNAME
);
DECLARE @CurrentTableName SYSNAME;
INSERT INTO @Tables ([name])
SELECT [name]
FROM [sys].[tables]
--WHERE [name] LIKE 'FULLTEXTLOOKTABLE_%';
WHILE EXISTS(SELECT 1 FROM @Tables)
BEGIN;
SELECT TOP 1 @CurrentTableName = [name]
FROM @Tables;
SELECT @CurrentTableName;
DELETE FROM @Tables
WHERE [name] = @CurrentTableName;
END;
DECLARE @DynamicTSQLStatement NVARCHAR(MAX);
SET @DynamicTSQLStatement = N'UPDATE [dbo].[table] SET [text] = ''test'' WHERE [ID] = 1';
EXEC sp_executesql @DynamicTSQLStatement;
对于动态T-SQL语句的构建和执行,您有两个选项。您可以构建整个语句并对每个循环执行它,如下所示:
DECLARE @Tables TABLE
(
[name] SYSNAME
);
DECLARE @CurrentTableName SYSNAME;
INSERT INTO @Tables ([name])
SELECT [name]
FROM [sys].[tables]
--WHERE [name] LIKE 'FULLTEXTLOOKTABLE_%';
WHILE EXISTS(SELECT 1 FROM @Tables)
BEGIN;
SELECT TOP 1 @CurrentTableName = [name]
FROM @Tables;
SELECT @CurrentTableName;
DELETE FROM @Tables
WHERE [name] = @CurrentTableName;
END;
DECLARE @DynamicTSQLStatement NVARCHAR(MAX);
SET @DynamicTSQLStatement = N'UPDATE [dbo].[table] SET [text] = ''test'' WHERE [ID] = 1';
EXEC sp_executesql @DynamicTSQLStatement;
或者,您可以将sp_executesql
与一起使用,并创建一个用当前值填充的模板
我希望这几点足以完成这项任务