- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我的存储过程有 6 个参数,给定这些参数,它会查看数据库中的所有表,并告诉您哪些表具有指定数据。
例如:
sp_cis_key_combo_snapshot_ListTables '123','',NULL,NULL,'%',NULL
这将返回包含所有该数据的所有表的列表,也就是具有 Incident_Nr = '123'、Agency = '' 且 Module_ID 不为空的任何表。
参数 NULL
表示该列可以存在或不存在于该表中,也就是无关紧要。
参数 ''
表示该列必须存在,但必须为空。
参数 '%'
表示该列必须存在,但不能为空。
如果参数不是上面列出的任何内容,例如 'ABC'
,那么它必须返回一个与此完全相同的列。
我的存储过程对 'A%C'
这样的参数没有用处,但它可以接受它们。
现在我需要这个的原因是“我的”数据库非常杂乱无章,我需要知道某些表如何相互关联,但不深入细节,我将如何加速这个存储过程?
USE [RMS]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[sp_cis_key_combo_snapshot_ListTables] (
@incident_nr VARCHAR(12),
@agency VARCHAR(4),
@suffix1 VARCHAR(3),
@suffix2 VARCHAR(3),
@module_id VARCHAR(3),
@type VARCHAR(2))
AS
BEGIN
SET NOCOUNT ON
DECLARE @tables TABLE (TABLE_NAME SYSNAME)
DECLARE @columns TABLE (COLUMN_NAME SYSNAME)
INSERT INTO @tables
SELECT [TABLE_NAME] = NAME
FROM sysobjects
WHERE type = 'U'
ORDER BY NAME
DECLARE @table_name SYSNAME
DECLARE @has_incident_nr_flag INT
DECLARE @has_agency_flag INT
DECLARE @has_suffix1_flag INT
DECLARE @has_suffix2_flag INT
DECLARE @has_module_id_flag INT
DECLARE @has_type_flag INT
DECLARE @total_flag INT
DECLARE @incident_nr_query VARCHAR(1000)
DECLARE @agency_query VARCHAR(1000)
DECLARE @suffix1_query VARCHAR(1000)
DECLARE @suffix2_query VARCHAR(1000)
DECLARE @module_id_query VARCHAR(1000)
DECLARE @type_query VARCHAR(1000)
start_loop:
SET @table_name = ''
SELECT TOP 1 @table_name = TABLE_NAME
FROM @tables
IF @table_name = ''
GOTO exit_loop
DELETE
FROM @tables
WHERE TABLE_NAME = @table_name
INSERT INTO @columns
SELECT [COLUMN_NAME] = c.NAME
FROM sysobjects t
INNER JOIN syscolumns c ON c.id = t.id
WHERE t.NAME = @table_name
ORDER BY c.colid
SELECT @has_incident_nr_flag = 0, @has_agency_flag = 0, @has_suffix1_flag = 0, @has_suffix2_flag = 0, @has_module_id_flag = 0, @has_type_flag = 0, @total_flag = 0
IF (@incident_nr IS NOT NULL)
SET @total_flag = @total_flag + 32
IF (@agency IS NOT NULL)
SET @total_flag = @total_flag + 16
IF (@suffix1 IS NOT NULL)
SET @total_flag = @total_flag + 8
IF (@suffix2 IS NOT NULL)
SET @total_flag = @total_flag + 4
IF (@module_id IS NOT NULL)
SET @total_flag = @total_flag + 2
IF (@type IS NOT NULL)
SET @total_flag = @total_flag + 1
IF EXISTS (
SELECT *
FROM @columns
WHERE column_name = 'Incident_Nr'
)
AND @incident_nr IS NOT NULL
SET @has_incident_nr_flag = 32
IF EXISTS (
SELECT *
FROM @columns
WHERE column_name = 'Agency'
)
AND @agency IS NOT NULL
SET @has_agency_flag = 16
IF EXISTS (
SELECT *
FROM @columns
WHERE column_name = 'Suffix_1'
)
AND @suffix1 IS NOT NULL
SET @has_suffix1_flag = 8
IF EXISTS (
SELECT *
FROM @columns
WHERE column_name = 'Suffix_2'
)
AND @suffix2 IS NOT NULL
SET @has_suffix2_flag = 4
IF EXISTS (
SELECT *
FROM @columns
WHERE column_name = 'Module_ID'
)
AND @module_id IS NOT NULL
SET @has_module_id_flag = 2
IF EXISTS (
SELECT *
FROM @columns
WHERE column_name = 'Type'
)
AND @type IS NOT NULL
SET @has_type_flag = 1
SET @incident_nr_query = ' '
SET @agency_query = ' '
SET @suffix1_query = ' '
SET @suffix2_query = ' '
SET @module_id_query = ' '
SET @type_query = ' '
IF (@has_incident_nr_flag = 32)
SET @incident_nr_query = 'AND Incident_Nr LIKE ' + '''' + @incident_nr + '''' + ' '
IF (@has_agency_flag = 16)
SET @agency_query = 'AND Agency LIKE ' + '''' + @agency + '''' + ' '
IF (@has_suffix1_flag = 8)
SET @suffix1_query = 'AND Suffix_1 LIKE ' + '''' + @suffix1 + '''' + ' '
IF (@has_suffix2_flag = 4)
SET @suffix2_query = 'AND Suffix_2 LIKE ' + '''' + @suffix2 + '''' + ' '
IF (@has_module_id_flag = 2)
SET @module_id_query = 'AND Module_ID LIKE ' + '''' + @module_id + '''' + ' '
IF (@has_type_flag = 1)
SET @type_query = 'AND Type LIKE ' + '''' + @type + '''' + ' '
IF (@total_flag = @has_incident_nr_flag + @has_agency_flag + @has_suffix1_flag + @has_suffix2_flag + @has_module_id_flag + @has_type_flag)
BEGIN
DECLARE @sql VARCHAR(1000)
SET @sql = 'IF EXISTS (
SELECT *
FROM dbo.' + @table_name + '
WHERE 1=1 ' + @incident_nr_query + @agency_query + @suffix1_query + @suffix2_query + @module_id_query + @type_query + '
) ' + 'BEGIN print ' + '''' + @table_name + '''' + ' END'
EXEC (@sql)
END
DELETE @columns
GOTO start_loop
exit_loop:
END
最佳答案
首先要提醒您的是,您有六个表具有(至少部分)相同的架构。如果您有六个表,它们都有相同的列,那么通常要做的是创建一个表并将数据存储在那里。
如果由于某种原因(我对此表示怀疑)这是不可能的,您可以使用 indexed view ,这是物化 View 的 MSSQL 名称。根据您的典型工作负载,这可能会帮助您提高性能。它的工作方式是预先计算 View - 无需在每次发生查询时访问表。索引也没有坏处。
关于algorithm - 缓慢的存储过程,搜索数据库中的所有表,有什么更好的算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16108666/
我的问题是如何在 python 中创建一个简单的数据库。我的例子是: User = { 'Name' : {'Firstname', 'Lastname'}, 'Address' : {'Street
我需要创建一个与远程数据库链接的应用程序! mysql 是最好的解决方案吗? Sqlite 是唯一的本地解决方案吗? 我使用下面的方法,我想知道它是否是最好的方法! NSString *evento
给定两台 MySQL 服务器,一台本地,一台远程。两者都有一个包含表 bohica 的数据库 foobar。本地服务器定义了用户 'myadmin'@'%' 和 'myadmin'@'localhos
我有以下灵活的搜索查询 Select {vt:code},{vt:productcode},{vw:code},{vw:productcode} from {abcd AS vt JOIN wxyz
好吧,我的电脑开始运行有点缓慢,所以我重置了 Windows,保留了我的文件。因为我的大脑还没有打开,所以我忘记事先备份我的 MySQL 数据库。我仍然拥有所有原始文件,因此我实际上仍然拥有数据库,但
如何将我的 Access 数据库 (.accdb) 转换为 SQLite 数据库 (.sqlite)? 请,任何帮助将不胜感激。 最佳答案 1)如果要转换 db 的结构,则应使用任何 DB 建模工具:
系统检查发现了一些问题: 警告:?:(mysql.W002)未为数据库连接“默认”设置 MySQL 严格模式 提示:MySQL 的严格模式通过将警告升级为错误来修复 MySQL 中的许多数据完整性问题
系统检查发现了一些问题: 警告:?:(mysql.W002)未为数据库连接“默认”设置 MySQL 严格模式 提示:MySQL 的严格模式通过将警告升级为错误来修复 MySQL 中的许多数据完整性问题
我想在相同的 phonegap 应用程序中使用 android 数据库。 更多说明: 我创建了 phonegap 应用程序,但 phonegap 应用程序不支持服务,所以我们已经在 java 中为 a
Time Tracker function clock() { var mytime = new Date(); var seconds
我需要在现有项目上实现一些事件的显示。我无法更改数据库结构。 在我的 Controller 中,我(从 ajax 请求)传递了一个时间戳,并且我需要显示之前的 8 个事件。因此,如果时间戳是(转换后)
我有一个可以收集和显示各种测量值的产品(不会详细介绍)。正如人们所期望的那样,显示部分是一个数据库+建立在其之上的网站(使用 Symfony)。 但是,我们可能还会创建一个 API 来向第三方公开数据
我们将 SQL Server 从 Azure VM 迁移到 Azure SQL 数据库。 Azure VM 为 DS2_V2、2 核、7GB RAM、最大 6400 IOPS Azure SQL 数据
我正在开发一个使用 MongoDB 数据库的程序,但我想问在通过 Java 执行 SQL 时是否可以使用内部数据库进行测试,例如 H2? 最佳答案 你可以尝试使用Testcontainers Test
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭 9 年前。 此问题似乎与 a specific programming problem, a sof
我正在尝试使用 MSI 身份验证(无需用户名和密码)从 Azure 机器学习服务连接 Azure SQL 数据库。 我正在尝试在 Azure 机器学习服务上建立机器学习模型,目的是我需要数据,这就是我
我在我的 MySQL 数据库中使用这个查询来查找 my_column 不为空的所有行: SELECT * FROM my_table WHERE my_column != ""; 不幸的是,许多行在
我有那个基地:http://sqlfiddle.com/#!2/e5a24/2这是 WordPress 默认模式的简写。我已经删除了该示例不需要的字段。 如您所见,我的结果是“类别 1”的两倍。我喜欢
我有一张这样的 table : mysql> select * from users; +--------+----------+------------+-----------+ | userid
我有表: CREATE TABLE IF NOT EXISTS `category` ( `id` int(11) NOT NULL, `name` varchar(255) NOT NULL
我是一名优秀的程序员,十分优秀!