相关疑难解决方法(0)

将一个充满逗号分隔值的varchar传递给SQL Server IN函数

使用Like和In 复制
动态SQL逗号分隔值查询
参数化查询

我有一个SQL Server存储过程,我想将一个varchar逗号分隔的值传递给一个IN函数.例如:

DECLARE @Ids varchar(50);
SET @Ids = '1,2,3,5,4,6,7,98,234';

SELECT * 
FROM sometable 
WHERE tableid IN (@Ids);
Run Code Online (Sandbox Code Playgroud)

这当然不起作用.我收到错误:

将varchar值'1,2,3,5,4,6,7,98,234'转换为数据类型int时转换失败.

如何在不诉诸构建动态SQL的情况下完成此任务(或相对类似的东西)?

sql t-sql sql-server sql-in

53
推荐指数
9
解决办法
17万
查看次数

为一个SQL参数传递多个值

我有一个CheckBoxList,用户可以从列表中选择多个项目.然后我需要能够将这些值传递给我的存储过程,以便它们可以在WHERE条件中使用,如:

WHERE ID IN (1,2,3)
Run Code Online (Sandbox Code Playgroud)

我尝试这样做,以便它的nvarchar参数和我传递字符串1,2,3:

WHERE ID IN (@IDs)
Run Code Online (Sandbox Code Playgroud)

但是这返回了以下错误:

Conversion failed when converting the nvarchar value '1,2,3' to data type int
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激!

t-sql sql-server-2005 checkboxlist where-in

4
推荐指数
1
解决办法
3万
查看次数

SQL Server:根据提供的行值为每一行运行功能

我仍在学习SQL,我在徘徊如何将行值传递给cross apply查询中的函数。

假设这是我的第一张桌子

SELECT 
    [Project], [emp_id],
    [Allocation_start], [Allocation_end]
FROM
    First_table
Run Code Online (Sandbox Code Playgroud)

我有一个带有2个参数的函数-开始和结束日期,并返回按周间隔分割的日期...

范例:

select * from [udf_GetIntervals]('2017-01-01','2017-01-30')
Run Code Online (Sandbox Code Playgroud)

数据:

dt_start    dt_end
----------------------
2016-12-26  2017-01-01 
2017-01-02  2017-01-08 
2017-01-09  2017-01-15 
2017-01-16  2017-01-22 
2017-01-23  2017-01-29 
2017-01-30  2017-02-05 
Run Code Online (Sandbox Code Playgroud)

我所做的是我运行了提到的函数,其日期从7月1日到12月30日开始,并将其存储在虚拟表中,然后与该表交叉应用。

select * 
from [First_table] 
cross apply
    (select * from #temp) b
Run Code Online (Sandbox Code Playgroud)

哪个有效,但它独立于first_tables开始和结束日期而工作,总是从第一个表返回每1个项目记录的所有星期。

我想知道,如何使用first_tables start_date和end_date值执行此操作,以便我的交叉应用仅返回行/结束日期中包含week_intervals的记录。

我希望对此事有任何暗示。

sql sql-server

4
推荐指数
2
解决办法
5272
查看次数