加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

(@Variable)查询中的SQL

发布时间:2021-03-02 13:42:07 所属栏目:编程 来源:网络整理
导读:我有以下代码,题目是我的变量列表@LocationList本质上是一个csv字符串.当我行使它作为(@LocationList)中LocationID的一部门时,它暗示它不是一个int(LocationID是一个i??nt).怎样让这个csv字符串被teh in子句接管? Declare @LocationList varchar(1000)Set @L

我有以下代码,题目是我的变量列表@LocationList本质上是一个csv字符串.当我行使它作为(@LocationList)中LocationID的一部门时,它暗示它不是一个int(LocationID是一个i??nt).怎样让这个csv字符串被teh in子句接管?

Declare @LocationList varchar(1000)
Set @LocationList = '1,32'

select Locations from table where Where LocationID in (@LocationList)

办理要领

最有用的要领是行使动态SQL,譬喻rt2800说起(由迈克尔艾伦打针告诫)

可是你可以做一个成果:

ALTER  FUNCTION [dbo].[CSVStringsToTable_fn] ( @array VARCHAR(8000) )
RETURNS @Table TABLE ( value VARCHAR(100) )
AS 
    BEGIN
        DECLARE @separator_position INTEGER,@array_value VARCHAR(8000)  

        SET @array = @array + ','

        WHILE PATINDEX('%,%',@array) <> 0 
            BEGIN
                SELECT  @separator_position = PATINDEX('%,@array)
                SELECT  @array_value = LEFT(@array,@separator_position - 1)

                INSERT  @Table
                VALUES  ( @array_value )

                SELECT  @array = STUFF(@array,1,@separator_position,'')
            END
        RETURN
    END

并从中选择:

DECLARE @LocationList VARCHAR(1000)
SET @LocationList = '1,32'

SELECT  Locations 
FROM    table
WHERE   LocationID IN ( SELECT   *
                           FROM     dbo.CSVStringsToTable_fn(@LocationList) )

要么

SELECT  Locations
FROM    table loc
        INNER JOIN dbo.CSVStringsToTable_fn(@LocationList) list
            ON list.value = loc.LocationID

当您实行从SSRS向PROC发送多值列表时,这很是有效.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读