- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用下面的 SQL 批处理脚本来测试数据库上的所有同义词是否都引用有效对象,作为数据库清理工作的一部分。该脚本仅对同义词执行查询,并打印出遇到的任何错误。这适用于 View 和表,但不适用于存储过程。
SET NOCOUNT ON
DECLARE @currentId INT;
DECLARE @currentSynonym VARCHAR(255);
SELECT @currentId = MIN(id) FROM sysobjects WITH (NOLOCK) WHERE [xtype]='SN';
WHILE @currentId IS NOT NULL
BEGIN
SELECT TOP(1) @currentSynonym = name FROM sysobjects WITH (NOLOCK) WHERE id = @currentId;
PRINT '';
PRINT '------------------------------------------------------------';
PRINT @currentSynonym;
PRINT '------------------------------------------------------------';
BEGIN TRY
EXEC('SELECT Top(1) NULL FROM ' + @currentSynonym + ' WITH (NOLOCK);');
PRINT 'Synonym is valid.';
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE();
END CATCH
SELECT @currentId = MIN(id) FROM sysobjects WITH (NOLOCK) WHERE [xtype]='SN' AND id > @currentId;
END
SET NOCOUNT OFF
是否有一个我可以在存储过程、表或 View 上执行的命令,如果该命令不存在,则会抛出错误?
同义词可以指向链接服务器上的对象,也可以指向当前 @@SERVERNAME 上的对象,因此我实际上不能只在 catch block 中查询 sys.procedures 来查看它是否存在。我必须知道同义词是否指向链接服务器,然后我必须查询该服务器的 sys.procedures View 。
我发现了类似的问题,How can I check if the table behind a synonym exists ,但这并不完全是我要问的。我发现的其他所有内容都是 Oracle 特定的。
<小时/>更新:下面的脚本可以满足我的需要。感谢 @kenny-evitt 为我提供了形成它所需的信息。
SET NOCOUNT ON
DECLARE -- for looping through sys.synonyms
@currentSynonym VARCHAR(255),
-- for parsing out [ServerName].[DatabaseName].[SchemaName].[ObjectName] from sys.synonyms.base_object_name
@baseObjectName NVARCHAR(1035),
@lastDelimiterIndex INT,
@lastToken NVARCHAR(255),
@sServer NVARCHAR (255),
@sDatabase NVARCHAR(255),
@sSchema NVARCHAR(255),
@sObject NVARCHAR(255),
-- for testing if synonym points to an existing object
@sql NVARCHAR(1035),
@objectCount INT,
-- for output formatting
@newLine NVARCHAR(2),
@tab NVARCHAR(4),
@validSynonyms NVARCHAR(MAX),
@invalidSynonyms NVARCHAR(MAX);
SET @validSynonyms = '';
SET @invalidSynonyms = '';
SET @newLine = CHAR(13) + CHAR(10);
SET @tab = ' ';
/* Loop through this DB's sys.synonyms view */
SELECT @currentSynonym = MIN(name) FROM sys.synonyms WITH (NOLOCK);
WHILE @currentSynonym IS NOT NULL
BEGIN
SET @sObject = NULL;
SET @sSchema = NULL;
SET @sDatabase = NULL;
SET @sServer = NULL;
/* Parse out [server].[database].[schema].[object] from sys.synonyms.base_object_name */
SELECT @baseObjectName = RTRIM(base_object_name) FROM sys.synonyms WITH (NOLOCK) WHERE name = @currentSynonym;
WHILE LEN(@baseObjectName) > 0
BEGIN
SET @lastToken = NULL;
SET @lastDelimiterIndex = CHARINDEX('.', @baseObjectName, 1) + 1;
-- Find the last token in @manipulated string,
-- Do this Right-to-Left, as the database and/or server may not be in sys.synonyms.base_object_name
WHILE (CHARINDEX('.', @baseObjectName, @lastDelimiterIndex) > 0)
BEGIN
SET @lastDelimiterIndex = CHARINDEX('.', @baseObjectName, @lastDelimiterIndex) + 1;
END
SET @lastToken = SUBSTRING(@baseObjectName, @lastDelimiterIndex - 1, LEN(@baseObjectName) - @lastDelimiterIndex + 3);
-- Kind of kludgy, but I put the $ character at the end of the string and @lastToken,
-- so that if 2 of the values match (i.e. object and database, object and schema, whatever) only the last one
-- is replaced.
SET @lastToken = @lastToken + '$';
SET @baseObjectName = @baseObjectName + '$';
SET @baseObjectName = REPLACE(@baseObjectName, @lastToken, '');
SET @lastToken = REPLACE(@lastToken, '.', '');
SET @lastToken = REPLACE(@lastToken, '[', '');
SET @lastToken = REPLACE(@lastToken, ']', '');
SET @lastToken = REPLACE(@lastToken, '$', '');
IF @sObject IS NULL
SET @sObject = @lastToken;
ELSE IF @sSchema IS NULL
SET @sSchema = @lastToken;
ELSE IF @sDatabase IS NULL
SET @sDatabase = @lastToken;
ELSE IF @sServer IS NULL
SET @sServer = @lastToken;
END
IF @sDatabase IS NULL
SET @sDatabase = DB_NAME();
IF @sServer IS NULL
SET @sServer = @@SERVERNAME;
/* End of token sys.synonyms.base_object_name parsing */
/* Query for the existence of the object on the database the synonym's object should be on. */
BEGIN TRY
SET @sql = N'SELECT @count = Count(1) FROM [' + @sServer + '].[' + @sDatabase + '].sys.sysobjects WITH (NOLOCK) WHERE [name] = ''' + @sObject + ''';';
EXECUTE sp_executesql @sql,
N'@count INT OUTPUT',
@count = @objectCount OUTPUT;
If @objectCount > 0
SET @validSynonyms = @validSynonyms + @tab + N'* ' + @currentSynonym + @newLine;
ELSE
SET @invalidSynonyms = @invalidSynonyms + @tab + N'* ' + @currentSynonym + @newLine;
END TRY
BEGIN CATCH
SET @invalidSynonyms = @invalidSynonyms + @tab + N'* ' + @currentSynonym + ' =>' + @newLine;
SET @invalidSynonyms = @invalidSynonyms + @tab + @tab + ERROR_MESSAGE() + @newLine;
END CATCH
SELECT @currentSynonym = MIN(name) FROM sys.synonyms WITH (NOLOCK) WHERE name > @currentSynonym;
END
/*End of sys.synonym Loop*/
PRINT 'Invalid Synonyms:' + @newLine + @newLine;
PRINT @invalidSynonyms;
PRINT @newLine + 'Valid Synonyms:' + @newLine + @newline;
PRINT @validSynonyms;
SET NOCOUNT OFF
最佳答案
对于如此简单的检查来说,这看起来是一个非常长的脚本;有什么问题吗:
if exists (select * from sys.synonyms where name = @currentSynonym and object_id(base_object_name) is not null)
begin
--Add logic here
end
关于sql - 是否有一个 T-SQL 命令可以检查同义词引用的对象是否存在且有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23687131/
我正在寻找一种方法来实现具有同义词和模糊性的自动建议 例如,当用户试图搜索“replce ar”时我的同义词列表有 ar => 录音 所以,结果应该包括匹配的项目改变录音更换录音等等, 这里我们需要模
我在 Pandas 中有两列:A 和 B,每列都包含术语字符串。我的目标是在 B 列中找到与 A 列最相似的条目。我已经在使用 TF-IDF 来执行此操作,但有时存在不明显匹配的同义词,例如货币和货币
通过 Oracle 查询是否可以找出存储过程使用哪些 View /同义词/表? 在 PL/SQL Developer 中,如果您折叠存储过程,它将显示“引用”,其中显示了存储过程使用的所有表/ Vie
我正在阅读这篇文章: Managing Oracle Synonyms 关于优先顺序,在将对象名称解析为实际对象时,它说: 本地对象总是首先被访问。 如果本地对象不存在,则将访问具有私有(privat
这是一个非常愚蠢的问题,但我需要帮助。 我有一张 mydbowner 拥有的 table 。它被命名为 mydbowner.mytable。我试图通过发出命令来创建一个公共(public)同义词: 为
我用同义词标记过滤器创建了一个测试索引 PUT /synonyms-index { "settings": { "analysis": { "filter": { "my_synonym_filte
故事:给定下面的示例文档并通过扩展它们,有可能获得以下排名: 对“ Cereal ”的搜索结果显示以下排名 Jade 米片 水稻脆饼 搜索“大米”会得出以下排名 印度香米 水稻脆饼 执行针对搜索的文档
背景: 一直以来,我一直认为,如果同义词文件中有任何更改,您将需要重新索引整个索引。当然,如果索引大小很小,过程不会那么慢,但是过程本身很乏味,并且会有停机时间。 所以问题: 在这种情况下,我的理解有
我正在尝试将给定单词的同义词存储到HashMap中。然后,我接受用户输入并检查它是否是一个单词或其同义词。例如,假设主要词是“bank”,其同义词是“safe”、“tresury”和“credit u
我有一个名为“unittest”的 Ant 目标,我觉得它很笨重,我想改用“test”。我需要保留名称“unittest”,因为其他人也使用 ant 构建文件。 有没有办法为特定目标添加别名或同义词?
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 Improve th
是否可以在索引中存储elasticsearch的同义词?或者是否可以从像 couchdb 这样的数据库中获取同义词列表?我想通过 REST-API 向 elasticsearch 动态添加同义词。 最
我如何从订单表中返回员工 ID 和每个员工处理的订单总数,并将总数从大到小排序。 最佳答案 使用 GROUP BY 计算每个员工的订单数量,并使用 ORDER BY 对结果进行排序。 SELECT e
我曾经使用 Solr,它会有包含停用词、同义词等文件的配置文件夹。每次进行更改时,您都可以使用 Zookeeper 下载 conf 文件,然后将其上传并分发到集群中的所有服务器。 ElasticSea
您好,我正在寻找问题的解决方案:我想找到与法语和英语相似的单词列表例如 :名字可以是:名字、姓氏、化名、普雷诺姆、用户名......邮政地址可以是:城市、国家、街道、维尔、付款、邮政编码......
我在自定义文件中使用同义词标记过滤器 在Windows 10计算机上将Elasticsearch 6.7安装为服务 我的同义词。txt位于C:\ProgramData\Elastic\Elastics
我正在将Ruby on Rails与elasticsearch-rails gem一起使用,并且尝试使用同义词过滤器。我一直在关注此处发布的问题以寻求指导(我的实现按预期工作,但同义词部分除外): h
我正在尝试学习如何将“同义词功能”正确添加到我现有的 ElasticSearch 设置中。到目前为止,这是我对这个过程的理解。如果您能指出我的任何误解,我将不胜感激 - 我是 elasticsearc
我正在使用 Mybatis 生成器生成对象。我能够在该模式中生成具有实际表名的类。但授予该表上不同模式的选择权限并创建了一个私有(private)同义词。我想使用该同义词生成对象。
我正在使用 python 2.7,我正在尝试使用阿拉伯语 WordNet 获取阿拉伯语单词的同义词 我下载了两个需要的文件: AWNDatabaseManagement.pyupc_db.xml 当我
我是一名优秀的程序员,十分优秀!