小编JJS*_*JJS的帖子

什么允许 SQL Server 用对象名称交换传递给系统过程的字符串

是什么导致将对象名称传递给系统存储过程是合法的sp_helptext

什么机制将对象名称转换为字符串?

例如

-- works
sp_helptext myproc
sp_helptext [myproc]
sp_helptext [dbo.myproc]
-- and behaves the same as a string
sp_helptext 'myproc'
sp_helptext 'dbo.myproc'

-- does not work
sp_helptext dbo.myproc -- Msg 102, Level 15, State 1, Line 1 incorrect syntax near '.'
-- an additional case that does not work.
sp_helptext [dbo].[myproc] -- Msg 102, Level 15, State 1, Line 1 incorrect syntax
Run Code Online (Sandbox Code Playgroud)

不需要单引号有效的.过程名称似乎很奇怪,除非它具有分隔模式名称和过程名称。我正在寻找有关如何将其从带引号的名称自动转换为要作为参数值传递的字符串文字的解释。

我没有要解决的具体问题;我只是对没有记录的事情感到好奇。

sql-server stored-procedures syntax parameter database-internals

13
推荐指数
1
解决办法
349
查看次数

dm_exec_describe_first_result_set_for_object 用于多个结果集

是否存在为存储过程中的所有结果集返回元数据的过程?

类似于sys.dm_exec_describe_first_result_set_for_object,但对于所有结果集?

最终,我想发现数据库中每个存储过程中每个结果集的元数据。现在,我只会满足于sys.dm_exec_describe_first_result_set_for_object无法描述的结果集。即第 2、第 3 和第 N 个结果集。

现在考虑使用 SQLCLR 来执行此操作:

如何保存具有多个结果集的过程的结果
tSQLt - SQL Server 的 DB 单元测试 - ResultSetFilter.cs

sql-server metadata sql-clr

9
推荐指数
1
解决办法
1592
查看次数

如何从正在执行的存储过程中获取当前行号

是否有函数或关键字可以让我获取存储过程中的当前行号?

我知道有一个未公开的LineNo函数允许您设置行号,并影响系统错误消息的输出 /sf/ask/283815801/ - 字做

我知道有一个功能,ERROR_LINE()这是一个可用的内部BEGIN CATCH ... END CATCH

ERROR_LINE()做我需要的,但我想从 CATCH 块之外使用它。文件中的任何位置。

 DECLARE @InsertSource VARCHAR(1000) = object_name(@@procid)
 EXEC PROC_Accounting_Transaction_Insert ... other parameters..., @InsertSource
Run Code Online (Sandbox Code Playgroud)

目前我只是硬编码调用#,因为它出现在存储过程主体中,但它很快就变老了。

DECLARE @InsertSource VARCHAR(1000) 

SET @InsertSource = object_name(@@procid) + '#1'
EXEC ...

SET @InsertSource = object_name(@@procid) + '#2'
EXEC ...
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures t-sql

8
推荐指数
2
解决办法
1万
查看次数

使用全文形式的屈折来生成术语

有没有办法使用全文查询组件来生成全文字典中作为单词屈折形式的单词列表?

此查询将根据查询为我提供匹配项。

select *
from keywords
WHERE CONTAINS(keyword, 'FORMSOF(INFLECTIONAL, migrate)')
Run Code Online (Sandbox Code Playgroud)

我对它用作匹配的单词感兴趣。我想要一个像

migrate
migrates
migration
migrations
Run Code Online (Sandbox Code Playgroud)

本质上是这个词的屈折/共轭形式。

sql-server full-text-search

5
推荐指数
1
解决办法
2942
查看次数

使用合并检查所有变量是否为空

如何使用coalesce 检查所有具有不同类型优先级的变量是否全部为NULL 而不会遇到错误。

DECLARE 
@StartDate DATETIME = NULL,
@EndDate DATETIME = NULL,
@StateCode CHAR(2) = NULL,
@CountyCode CHAR(3) = NULL,
@ProducerName VARCHAR(64) = null,
@TaxID VARCHAR(9) = null,
@Farm INT = null

SELECT CASE WHEN COALESCE(
    @StartDate, 
    @EndDate, 
    @StateCode, 
    @CountyCode, 
    @ProducerName, 
    @TaxID, 
    @Farm) IS NULL 
THEN 'yes' ELSE 'no' END
Run Code Online (Sandbox Code Playgroud)

输出:'是'

添加SELECT @StateCode = '22'会出现此错误

Msg 241, Level 16, State 1, Line 94
Conversion failed when converting date and/or time from character string.
Run Code Online (Sandbox Code Playgroud)

这是有效的

SELECT CASE WHEN …
Run Code Online (Sandbox Code Playgroud)

sql-server t-sql

5
推荐指数
2
解决办法
1692
查看次数