当前位置: 首页 > 面试题库 >

如何在SQL动态查询中使用逗号分隔的字符串

梅宏盛
2023-03-14
问题内容

我有一个将从逗号分隔的字符串返回整数值的函数,它需要两个参数(@string nvarchar(4000),@ delimiter
char(1))。所以问题是如果我在动态查询中使用此函数,我会报错,这是查询

declare @ProductIDs varchar(11)
declare @SQL varchar(max)

set @ProductIDs='1,2,3,4'
declare @query varchar(max)
--set @query= @ProductIDs +','+@Delimiter

SELECT @SQL = 'SELECT val FROM dbo.[fnDelimitedStringToTable]('+ @ProductIDs +' , '','')'

Exec(@SQL)

我收到错误消息程序或函数dbo.fnDelimitedStringToTable指定了太多参数。


问题答案:

当您构建像这样的动态SQL时,您需要将参数用双引号引起来 ''

declare @ProductIDs varchar(11)
declare @SQL varchar(max)

set @ProductIDs='1,2,3,4'
declare @query varchar(max)
--set @query= @ProductIDs +','+@Delimiter

SELECT @SQL = 'SELECT val FROM dbo.[fnDelimitedStringToTable]('''+ @ProductIDs +''' , '','')'

Exec(@SQL)

这样,SQL语句将为:

SELECT val FROM dbo.[fnDelimitedStringToTable]('1,2,3,4' , '','')

并不是:

SELECT val FROM dbo.[fnDelimitedStringToTable](1,2,3,4 , '','')


 类似资料:
  • 问题内容: 这是我的表结构: 我需要拆分该列,并希望通过一个简单的sql查询来做到这一点,因为我不知道如何使用函数,并且希望将其保持简单。 这是我已经发现的: 但这仅输出 有没有一种方法来拆分一切从到,,等? 提前致谢。 问题答案:

  • 问题内容: 我需要在数据库中填充纬度和经度列,但是原始信息存储为单个字符串 例如。 我猜想TRIM命令在这里很有用,但是我不知道如何告诉它每半个部分都精确地停在逗号上。 我希望能够提出一个简单的UPDATE查询,如下所示: 但是显然在LTRIM和RTRIM部分中需要做一些额外的工作,因此我只选择数据,但不包括UDFChar1中的逗号。 关于如何实现这一目标的任何想法? 问题答案: 请试试: 和 样

  • 问题内容: 我有3个表,分别为: 应用程序(ID,名称) 资源(ID,名称) ApplicationsResources(id,app_id,resource_id) 我想在GUI上显示所有资源名称的表。我想在每一行的一个单元格中列出该资源的所有应用程序(以逗号分隔)。 所以问题是,在SQL中执行此操作的最佳方法是什么,因为我需要获取所有资源,并且还需要获取每种资源的所有应用程序? 我是否先从资源

  • 问题内容: 我有从.net应用程序A,B,C,D,E,F获取的字符串, 我想写一个SQL选择语句像 这在t-SQL中将不起作用,因为它使用不将值分开的一个字符串。有什么办法可以做到这一点? 问题答案: 它认为最简单的方法是动态SQL生成:

  • 问题内容: 这个问题已经在这里有了答案 : 在MySQL 4中汇总逗号分隔的列(不是5) (4个答案) 7年前关闭。 所以我想得到这个结果: 我可以在SQL(MySQL)中做到吗? 问题答案: 您可以更动态地创建函数。请按照以下步骤 创建一个给出逗号分隔值之和的函数 ( @commaSeperatedVal varchar(100) ) RETURNS int AS BEGIN return @s

  • 问题内容: 我已经尝试过一些试验,但还不能解决。任何帮助,将不胜感激。 我有一个像下面的表。 我正在寻找的结果是。它会删除所有重复项,并仅保留具有其关联ID的不同值。 我试图用(len(replace(@ProjectNames,’,’))来计算逗号的数量 使用http://www.logiclabz.com/sql-server/split-function-in-sql-server-to-b