(@Variable)查询中的SQL
发布时间:2021-03-04 13:01:56 所属栏目:MsSql教程 来源:网络整理
导读:我有以下代码,问题是我的变量列表@LocationList本质上是一个csv字符串.当我使用它作为(@LocationList)中LocationID的一部分时,它表示它不是一个int(LocationID是一个i??nt).如何让这个csv字符串被teh in子句接受? Declare @LocationList varchar(1000)Set
我有以下代码,问题是我的变量列表@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发送多值列表时,这非常有用. (编辑:开发网_郴州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 小聪软件在意利商业广场的工程招标中胜出!
- SQL-’08:多个Replace语句是不好的做法/还有另一种写这个查
- SQL语句 一个简单的字符串分割函数
- sql-server – 如何阻止SQL Server将信息行记录到SQLFT日志
- 数据库 – 有没有办法在Oracle SQL Developer中查看关系?
- sql语句优化规则是什么?sql语句编写需要注意什么问题?
- SQL Server索引维护指导
- 数据库设计 – 在具有缩写表名的表中为每个字段名添加前缀是
- sql-server-2005 – 在SQL Server 2005中向存储过程添加参数
- 脚本监控sql server 2008 R2 replication性能