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

SQL-使用IN的Select语句的存储过程(@Variable_CommaDelimitedListOfIDS)

应和悦
2023-03-14
问题内容

我正在创建一个存储过程,我要将逗号分隔的ID列表作为变量传递给该存储过程。我想将Ids用作select语句,例如:

Create Procedure up_TEST
@Ids VARCHAR(MAX)
AS
SELECT * FROM ATable a
WHERE a.Id IN(@Ids)

显然,我得到的错误@Ids是varchar而不是INT,但是如何转换逗号分隔列表?


问题答案:

对于这些情况,我使用此表函数,您可以根据需要进行调整:

CREATE FUNCTION dbo.f_params_to_list (@par VARCHAR(500))
returns @result TABLE (value VARCHAR(30))
AS  
begin
     DECLARE @TempList table
          (
          value VARCHAR(30)
          )

     DECLARE @Value varchar(30), @Pos int

     SET @par = LTRIM(RTRIM(@par))+ ','
     SET @Pos = CHARINDEX(',', @par, 1)

     IF REPLACE(@par, ',', '') <> ''
     BEGIN
          WHILE @Pos > 0
          BEGIN
               SET @Value = LTRIM(RTRIM(LEFT(@par, @Pos - 1)))
               IF @Value <> ''
               BEGIN
                    INSERT INTO @TempList (value) VALUES (@Value) --Use Appropriate conversion
               END
               SET @par = RIGHT(@par, LEN(@par) - @Pos)
               SET @Pos = CHARINDEX(',', @par, 1)

          END
     END    
     INSERT @result
     SELECT value 
        FROM @TempList
     RETURN
END

在您的存储过程中,您将像这样使用它:

Create Procedure up_TEST
@Ids VARCHAR(MAX)
AS
SELECT * FROM ATable a
WHERE a.Id IN(SELECT value FROM dbo.f_params_to_list(@Ids))


 类似资料:
  • 问题内容: 我有一个存储过程,返回一个。如何在语句中使用此存储过程的结果? 我需要这样的东西 我正在使用SQL Server 2005 问题答案: 而是创建一个表值的用户定义函数。

  • 问题内容: 我正在尝试创建一个存储过程。这是我到目前为止(不起作用)的内容: HAVERSINE是我创建的可以正常工作的函数。如您所见,我正在尝试从“城市”表中获取城市的ID,然后将cityLat和cityLng设置为该记录的其他值。我显然在这里通过使用SELECTs做错了。 这有可能吗?看来应该如此。任何帮助将不胜感激。 问题答案: 更正了一些问题,并添加了一个替代选择-适当删除。

  • 问题内容: 我有一个存储过程返回行: 我的实际过程稍微复杂一点,这就是为什么需要一个sproc的原因。 是否可以通过调用此过程来选择输出? 就像是: 我需要使用,和其他子句来分页数据,而且我真的不想将这些值作为参数传递。 问题答案: 您可以使用用户定义的函数或视图代替过程。 一个过程可以返回多个结果集,每个结果集都有自己的模式。它不适合在语句中使用。

  • 希望大家都做得好! 需要存储过程方面的帮助。创建过程时出现以下错误。非常感谢您的帮助。 错误:#1064-您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解使用near'CREATE PROCEDURE regi_email(在电子邮件VARCHAR(255)中,counti OUT INT)的正确语法 开始 “在3号线 我的程序如下:

  • SimpleJdbcCall类可用于使用IN和OUT参数调用存储过程。 您可以在使用Apache Derby,DB2,MySQL,Microsoft SQL Server,Oracle和Sybase等RDBMS时使用此方法。 要理解这种方法,让我们使用可以在MySQL TEST数据库中使用以下DDL创建的Student表 - CREATE TABLE Student( ID INT NO

  • 问题内容: 我正在尝试将LIKE关键字与%通配符一起包装参数,但是我不确定如何在不破坏它的情况下将%字符放入语句中。现在我有: 我的.net应用程序中出现SqlException错误,提示“运行时’@search’附近语法不正确。如果删除@search参数周围的%字符,该错误就会消失。 问题答案: %字符必须 在 搜索字符串中… 请注意,以下内容也可以使用,但会引入潜在的SQL注入漏洞…