这是一个简单的问题,我似乎想不出解决方案。
我在存储过程中定义了这个:
@communityDesc varchar(255) = NULL
@communityDesc是“ aaa,bbb,ccc”
在我的实际查询中,我尝试使用 IN
WHERE AREA IN (@communityDesc)
但这不起作用,因为我的逗号在字符串内,而不是像这样的“ aaa”,“ bbb”,“ ccc”
所以我的问题是,对@communityDesc我可以做些什么,使其与我的IN语句一起工作,例如重新格式化字符串吗?
首先,您最多会创建一个函数来分割字符串,例如以下代码
CREATE FUNCTION dbo.splitstring ( @stringToSplit VARCHAR(MAX) )
RETURNS
@returnList TABLE ([Name] [nvarchar] (500))
AS
BEGIN
DECLARE @name NVARCHAR(255)
DECLARE @pos INT
WHILE CHARINDEX(',', @stringToSplit) > 0
BEGIN
SELECT @pos = CHARINDEX(',', @stringToSplit)
SELECT @name = SUBSTRING(@stringToSplit, 1, @pos-1)
INSERT INTO @returnList
SELECT @name
SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)-@pos)
END
INSERT INTO @returnList
SELECT @stringToSplit
RETURN
END
那么您可以使用此功能是这样的查询
WHERE AREA IN (dbo.splitstring(@communityDesc))
主要内容:示例Transact SQL 中的存储过程用于一次又一次地节省编写代码的时间。它通过将过程存储在数据库中并通过传递参数来获得所需的输出来实现这一点。 语法: 下面是存储过程创建的语法 - 参数可选:当我们创建一个过程时,一个或多个参数被传递到过程中。存储过程中有3种类型的参数: IN - 过程可以引用参数。该过程将覆盖参数的值。 OUT- 过程不能引用参数,但过程会覆盖参数值。 IN OUT- 参数被
SQL Server存储过程将一个或多个Transact-SQL语句分组到逻辑单元中,并作为对象存储在数据库服务器中。 当第一次调用存储过程时,SQL Server会创建执行计划并将其存储在计划缓存中。 在之后的存储过程执行中,SQL Server重用该程序,以便存储过程可以非常快速地执行并具有可靠的性能。 本系列教程将介绍存储过程,并演示如何开发灵活的存储过程以优化数据库访问。 第1节. SQL
主要内容:PL/SQL子程序的部分,创建存储过程,执行独立程序,删除独立存储过程,PL/SQL子程序中的参数模式,传递参数的方法在本章中,我们将讨论PL/SQL中的存储过程。 子程序是执行特定任务的程序单元/模块。 这些子程序组合起来形成更大的程序。这种做法被称为“模块化设计”。 子程序可以被称为调用程序的另一个子程序或程序调用。 可以在以下几个地方中创建一个子程序 - 在模式(schema)级别中 一个程序包中 在PL/SQL块中 在模式(schema)级别中,子程序是一个独立的子程序。它是使
本文向大家介绍sql存储过程详解,包括了sql存储过程详解的使用技巧和注意事项,需要的朋友参考一下 1,不带参数的存储过程 2,带输入参数的存储过程 3,带输入和输出参数的存储过程 4,带返回值的存储过程 不带参数的存储过程 例如,以下存储过程返回Employees表中所有职员的记录。 存储过程代码: 调用代码: 结果: 可以看到,共返回了9条记录。 带输入参数的存储过程 例如,该存储过程接受输入
我试图使用RazorSQL客户端在DB2数据库中创建一个存储过程,但遇到了以下错误: 块引用错误:字符、标记或子句无效或丢失。DB2SQL错误:SQLCODE=-104, SQLSTATE=42601, SQLERRMC=SELECT 存储过程代码为:
问题内容: 我的大多数SP都可以通过手动输入的数据简单地执行(和测试)。这很好用,使用简单的PRINT语句可以“调试”。 但是,在某些情况下,涉及多个存储过程,并且找到要输入的有效数据很繁琐。从我的Web应用程序中触发事件会更容易。 我对Profiler有一点经验,但是我还没有找到一种方法来探索存储过程中逐行进行的操作。 你的方法是什么? 一如既往的谢谢你。 注意:我假设使用SQL Server