简体   繁体   English

在另一个查询中使用串联的字符串变量

[英]using a concatenated string variable in another query

I have a SPROC like this in SQL server which will split a concatenated string ([var1][var2]) and return 2 result set, how do I pass each individual item from the result sets into another @var in my SProc so that I can do this, thanks: 我在SQL Server中有一个这样的SPROC,它将拆分一个连接字符串([var1] [var2])并返回2个结果集,如何将结果集中的每个项目传递到我的SProc中的另一个@var中,以便可以做到这一点,谢谢:

SET @var3 = (select [var1]+[var2]) --Join the result sets values and assign it to another variable
                 from ...where...

Result sets: 结果集:

eg 例如

resultset
----
tbl1
----
[var1]

resultset
----
tbl1
----
[var2]

Query that splits the concatenated string into it's parts: 将连接的字符串分成多个部分的查询:

declare @Str as varchar(100) 

set @Str = '[Var1][Var2]' 
while (@Str <> '') begin 
        select LEFT(@Str, CHARINDEX(']', @Str))  as resulttbl 
        set @Str = SUBSTRING(@Str, CHARINDEX(']', @Str) + 1, LEN(@Str))  

end

You could use OUTPUT parameters... 您可以使用OUTPUT参数...

CREATE PROCEUDRE yourSP (@str AS VARCHAR(max), @output1 AS VARCHAR(max) OUTPUT, @output2 AS VARCHAR(max) OUTPUT)
AS
BEGIN
  while (@Str <> '') begin 
    set @output1 = LEFT(@Str, CHARINDEX(']', @Str))
    set @Str = SUBSTRING(@Str, CHARINDEX(']', @Str) + 1, LEN(@Str))  
  end
  set @puput2 = @str
END


Then call that SP with bout input and output variables. 然后使用bout输入和输出变量调用该SP。

DECLARE
  @str     VARCHAR(max),
  @result1 VARCHAR(max),
  @result2 VARCHAR(max)
SELECT
  @str     = '[Var1][Var2]'

EXEC yourSP @str, @result1 OUTPUT, @result2 OUTPUT

SELECT @str, @output1, @output2


Or, you could package it in a table valued function instead of a stored procedure... 或者,您可以将其打包为表值函数而不是存储过程。

SELECT
  @output1 = split.value1,
  @output2 = split.value2
FROM
  dbo.yourFn(@str) AS split

And if you have atable of data to process, this then applows you to use APPLY... 而且,如果您有足够的数据要处理,则可以使用APPLY ...

SELECT
  source.str,
  split.value1,
  split.value2
FROM
  source
CROSS APPLY
  dbo.yourFn(source.str) AS split

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM