相关疑难解决方法(0)

具有LIKE和IN条件的参数化查询

.Net中的参数化查询在示例中总是如下所示:

SqlCommand comm = new SqlCommand(@"
   SELECT * 
   FROM   Products 
   WHERE  Category_ID = @categoryid
", 
   conn);
comm.Parameters.Add("@categoryid", SqlDbType.Int);
comm.Parameters["@categoryid"].Value = CategoryID;
Run Code Online (Sandbox Code Playgroud)

但是我碰到了一堵砖墙试图做到以下几点:

SqlCommand comm = new SqlCommand(@"
   SELECT * 
   FROM   Products 
   WHERE  Category_ID IN (@categoryids) 
      OR  name LIKE '%@name%'
", 
   conn);
comm.Parameters.Add("@categoryids", SqlDbType.Int);
comm.Parameters["@categoryids"].Value = CategoryIDs;
comm.Parameters.Add("@name", SqlDbType.Int);
comm.Parameters["@name"].Value = Name;
Run Code Online (Sandbox Code Playgroud)

哪里

  • CategoryID是以逗号分隔的数字列表"123,456,789"(不带引号)
  • Name是一个字符串,可能带有单引号和其他错误字符

什么是正确的语法?

.net sql parameters sql-injection parameterized

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

将逗号分隔的字符串转换为整数,以便在"IN"SQL中使用

我将逗号分隔的数字作为字符串传递给存储过程,参数在IN关键字中使用,但是当我执行SP(参数如"1,2")时,它给出了一个错误:

将varchar值'1,2'转换为数据类型int时转换失败.

存储过程是:

ALTER PROCEDURE [Reports].[LocationSummary]
    @dtFrom VARCHAR(MAX),
    @dtTo VARCHAR(MAX),
    @passTypeId VARCHAR(MAX),
    @passCategoryId VARCHAR(MAX),
    @passTransId VARCHAR(MAX),
    @printOption VARCHAR(MAX),
    @printLocationId VARCHAR(MAX)
AS
BEGIN
    SELECT Admins.PLocations.ArabicName AS PLocationA, 
           Admins.PLocations.EnglishName AS PLocationE,
           SUM(CASE WHEN Port.Info.Printed = 1 THEN 1 ELSE 0 END) AS Printed,
           SUM(CASE WHEN Port.Info.Printed = 0 THEN 0 ELSE 1 END) AS NotPrinted,
           SUM(CASE WHEN Port.PortPrintLog.PortId IS NOT NULL THEN 1 ELSE 0 END) AS Reprinted

    FROM Port.Info INNER JOIN
           Port.PortRequests ON 
           Port.Info.PassRequestId = Port.PortRequests.ID LEFT JOIN
           Port.PortDefinitions …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server sql-server-2008

6
推荐指数
2
解决办法
1万
查看次数

其中IN以逗号分隔的字符串

我想从临时表#temptable的完整列表中检索某些用户.查询是这样的:

DECLARE @List varchar(max)
SELECT @List = coalesce(@List + ',','') + '''' + StaffCode + ''''
FROM tblStaffs

SELECT UserName
FROM #temptable
WHERE #temptable.StaffCode IN (@List)
Run Code Online (Sandbox Code Playgroud)

我可以告诉@List格式正确:

'AAA','ABB','BBB','CCC','DDD','MMM'
Run Code Online (Sandbox Code Playgroud)

如果我改变它

WHERE #temptable.StaffCode IN ('AAA','ABB','BBB','CCC','DDD','MMM')
Run Code Online (Sandbox Code Playgroud)

它当然工作正常,那么为什么不IN(@List)?

sql-server delimiter where-in

6
推荐指数
2
解决办法
2万
查看次数

动态 SQL 逗号分隔值查询

[更新:使用 SQL Server 2005]

您好,我想要做的是使用逗号分隔的值 (ids) 列表查询我的存储过程以检索数据行。

我收到的问题是转换错误:

Conversion failed when converting the varchar value ' +
@PassedInIDs + ' to data type int.
Run Code Online (Sandbox Code Playgroud)

我的 where 子句和错误中的语句是:

...
AND (database.ID IN (' + @PassedInIDs + '))
Run Code Online (Sandbox Code Playgroud)

注意:database.ID是int类型。

我正在关注这篇文章:

http://www.sql-server-helper.com/functions/comma-delimited-to-table.aspx

但由于错误而没有完成。

在我的执行脚本中,我有:

...
@PassedInIDs= '1,5'
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么吗?感谢您的帮助。

sql dynamic-sql delimited delimiter

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

将列与t-sql中的值列表进行比较

我有一种情况,我在页面上显示记录,我需要一种方法让用户选择要在另一页上显示的那些记录的子集.这些记录不存储在任何地方,它是动态生成的东西.我知道我可以使用jquery将逗号分隔的值传递给我的其他网页,但我不确定在sql中最好的方法是说哪个uniqueid在这个id列表中不在表等中我我知道我可以用一堆ors动态构造sql,但这看起来像是一个黑客.还有其他人有什么建议吗?

t-sql sql-server

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

如何在 SQL 查询中使用转义和 LIKE

我的查询是:

declare @param1 INT,
@param2 nvarchar(max)

set @param1 = 1
set @param2 = '[Test_data_forQry],[Next_Test_Data]'

SELECT * 
FROM Table1
WHERE
    ColumnA = @param1  
AND (',' + @param2 +',' LIKE '%,' + CONVERT(VARCHAR, ColumnB) + ',%');
Run Code Online (Sandbox Code Playgroud)

方括号和下划线阻止数据获取。我的问题是我应该在查询的最后一行中放置转义“\” 。我也尝试过REPLACE选项,但没有用

set @param1 = 1
set @param2 = '[Test_data_forQry],[Next_Test_Data]'

set @param2  = replace (replace(@param2  , '[', '[[]'), '_','[_]') 

SELECT * 
FROM Table1
WHERE
    ColumnA = @param1  
AND (',' + @param2 +',' LIKE '%,' + CONVERT(VARCHAR, ColumnB) + ',%');
Run Code Online (Sandbox Code Playgroud)

sql t-sql

5
推荐指数
1
解决办法
918
查看次数

在 SQL 中将多个值传递给函数的参数

有Getfunctionname(userid, startdate, enddate)返回表的函数

我的问题是我可以传递具有多个值的变量吗?

IE

getfunctionname(@userid, startdate, enddate)
Run Code Online (Sandbox Code Playgroud)

变量的值@userid就像

1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

(实际上是使用split函数将值从 is 中分离出来1,2,3,4,5)

如果可以请告诉我

sql t-sql sql-server sql-server-2008 sql-server-2012

5
推荐指数
1
解决办法
2万
查看次数

为一个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万
查看次数

在IN子句中使用逗号分隔的参数

我已经'param1, param2, parma3'从SSRS到存储过程作为varchar参数:我需要在查询的IN子句中使用它,但随后需要像这样首先更改其格式:

select *
from table1
where col1 in('param1', 'param2', 'param3')
Run Code Online (Sandbox Code Playgroud)

在不创建函数和参数表的情况下重新格式化参数的最佳方法是什么?

sql t-sql parameters stored-procedures reporting-services

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

如何编写存储过程以接受使用IN操作删除行的集合?

我正在尝试为删除编写存储过程。但是为了提高性能,我们已将delete sql查询更改为使用IN操作。我要编写接受逗号分隔ID的过程。

我尝试编写一个接受单个条目ID的过程。步骤如下。

CREATE PROCEDURE DeleteListEntry
        @entryid int

AS

DELETE FROM  LIST_ITEMS
 WHERE ENTRY_ID = @entryid;
go
Run Code Online (Sandbox Code Playgroud)

我想知道如何将上述过程转换为接受批量输入。它的SQL查询如下-

DELETE FROM LIST_ITEMS WHERE ENTRY_ID IN (id1, id2, id2, ... );
Run Code Online (Sandbox Code Playgroud)

sql sql-server stored-procedures

2
推荐指数
1
解决办法
76
查看次数