定义一个字符串在SQL Server中恒?

是否有可能在SQL Server中定义一个字符串常量? 我重写某些查询使用存储过程,每个人都有相同的长字符串作为IN语句[A],[B],[C]等的一部分

它预计不会改变,但能在将来的某个时候。 这也是一个很长的字符串(几百个字符),所以,如果有一种方法来定义一个全局常量此,这将是很容易的工作。

如果这是可能我也有兴趣知道,如果它工作在这种情况下。 我曾试图通过这个字符串作为参数,这样我就可以从一个点我的应用程序中控制,但存储过程并不喜欢它。

--------------解决方案-------------

你可以创建一个表,一列和行,并在其上​​写禁止。

用它作为你的全球字符串常量(或额外的常量,如果你愿意的话)。

你问一件事(字符串在MS SQL不变),但似乎可能需要别的东西。 我之所以说这是因为你已经在你的最终目标,这显然是利用IN子句相同的多个存储过程中给出一些提示。

最大的线索是在最后一句:

我曾试图通过这个字符串作为参数,这样我就可以从一个点我的应用程序中控制,但存储过程并不喜欢它。

没有你的SQL脚本的详细信息,我将尝试使用一些心理调试技术,看看我能得到你什么,我相信是你的实际目标,不一定是你的既定目标。

鉴于你的存储过程“不喜欢”当你想在一个字符串作为参数传递,我猜测的字符串组成只是值的分隔列表,类似“10293,105968,501940”或者“果汁,牛奶,甜甜圈“(不注意的实际列表值 - 中重要的部分是分隔列表本身)。 而你的SQL可能看起来像这样(再次,忽略了具体的名字,注重基本概念):

SELECT Column1, Column2, Column3
FROM UnknownTable
WHERE Column1 IN (@parameterString);

如果这大约描述你试图采取的路径,则需要重新考虑你的方法。 使用普通的T-SQL语句,你将无法参数值的字符串传递给IN子句 - 它只是不知道他们做什么。

有替代品,但是:

  1. 动态SQL - 你可以建立整个SQL语句,参数和所有的,然后执行,在SQL数据库。 这可能不是你想要达到的,因为你是移动脚本存储过程。 但是,在此列出的完整性。
  2. 值表 - 您可以创建包含您所感兴趣的特定值的单列表那么你的存储过程可以简单地从该表中使用的列IN子句)。 这样一来,就不需要动态SQL。 既然你表明该值是不可能改变的,你可能只需要填充表一次,并使用它只要适当。
  3. 字符串分析得出的值列表 - 您可以通过值列表作为一个字符串,然后实现代码列表解析为动态表结构。 该技术的另一种形式是通过包含值的XML结构,并使用MS SQL Server的XML功能来导出表。
  4. 定义返回的值,以使用表值函数 - 我还没有试过这一个,所以我可能会丢失一些东西,但你应该能够在一个表值函数定义的值(可能使用大量UNION语句或某事),并调用IN子句中的作用。 再次 - 这是一个未测试的建议,将需要通过被加工,以确定它的可行性。

我希望帮助(假设我已经猜到你的潜在的窘境)。

对于未来的参考,这将是非常有益的,如果你能包括SQL脚本,显示你的表结构和存储过程的逻辑,所以我们可以看到你实际上尝试。 这将大大提高您收到答案的有效性。 谢谢。

PS的链接,字符串分析实际上包括种类繁多的对信息传递的数组(即表)技术,以存储过程 - 这是对这种事情非常好的资源。

除了字符串常量表作为俄德建议,我已经使用标量函数封装一些常量。 这将是较少的常量,当然更好,但它们的使用很简单。

也许一个组合 - 字符串常量表,需要一个键和返回字符串的函数。 你甚至可以使用本地化由具有功能采取了“区域”,并结合与一键返回不同的字符串!

分类:SQL服务器 时间:2015-03-15 人气:1
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.497 (s). 10 q(s)