我正在创建一个存储过程,我要将逗号分隔的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注入漏洞…