假设我在SQL Server 2012中有以下SQL代码段:
DECLARE @fname varchar(20), @strVarName varchar(50)
SET @fname = 'cronus'
SET @strVarName = COVERT_VARIABLE_TO_STRING_NAME ( @fname)
--this should return '@fname'. this is not a value conversion this is converting a variable name to a string name
SELECT @strVarName
我该怎么做呢?
6条答案
按热度按时间xpszyzbs1#
SQL Server不支持reflection。您可以从其目录视图中检索列名或表名,但如果使用变量,就不太走运了。也许您可以使用动态SQL找到解决此问题的其他方法。
iq3niunx2#
使用动态sql查询
qzlgjiam3#
以下是用于存储字符串的字符数据类型:
如果你已经使用变量作为字符串,那么为什么需要转换为字符串
如果需要,使用CAST和CONVERT函数
juzqafwq4#
这是一个奇怪的问题,听起来像是我会尝试的。
嗯,SQL不应该这样做,但我想,这并不意味着你不能做到这一点。
我认为您实际上必须编写自己的流程来完成此任务,沿着:
创建
dbo.sProcInserts
存储过程以将值插入表中:创建
dbo.sProcExec
存储过程以执行存储过程:SET @Var =
或SELECT @Var =
)select @Variable
调用dbo.sProcInserts这样,实际上不必对sProc进行任何修改,它应该捕获变量流及其在过程中的更改
isr3a4wc5#
对于那些“初学者”来说,你可能不应该回答任何问题,因为你很难理解所提出的问题。ORRR...你认为问题比实际简单。在C#中,现在你有nameof(...),以便您可以添加类、变量、等到字符串(用于任何目的)。我相信高级程序员会找到它的用途。不那么高级的程序员(即使高级程序员仍然处于初级水平)无法理解原因。无论如何...有一种方法来获得变量作为名称在C#中很方便,在SQL Server中也会很方便。变通方法看起来很愚蠢,但至少有人做了一次尝试,我相信我们能理解这一点。想知道原因的必要性也很荒谬:“为什么”并不总是重要的。人们有他们的理由。如果你不知道,你就不要评论。如果你知道,那么分享吧。我们会感激你的。如果你不理解这个问题,请随时要求澄清。没有人需要向贫穷的程序员或一开始就有愤怒问题的程序员证明理由:-)所以,我把这个问题看作是SQL Server版本的nameof({variable name}),它只是把变量名作为字符串......简单,对吗?没有转换......不谈论变量的内容。只是变量名。天啊,有些程序员的沟通能力太有限,不先生气。:-)
lp0sw83n6#
然而,需求本身对我来说有点奇怪,但这里有一个方法,可能是一个很好的起点:
通过运行上面的查询,您将获得变量名称。输出:
您可以找到SplitString函数Here的源代码。如果您使用的是SQL Server 2016,并且数据库的兼容性级别等于或大于130,您还可以使用Microsoft自行推出的
SPLIT_STRING
。Learn more Here