.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)
哪里
什么是正确的语法?
我将逗号分隔的数字作为字符串传递给存储过程,参数在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) 我想从临时表#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 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)
我在这里做错了什么吗?感谢您的帮助。
我有一种情况,我在页面上显示记录,我需要一种方法让用户选择要在另一页上显示的那些记录的子集.这些记录不存储在任何地方,它是动态生成的东西.我知道我可以使用jquery将逗号分隔的值传递给我的其他网页,但我不确定在sql中最好的方法是说哪个uniqueid在这个id列表中不在表等中我我知道我可以用一堆ors动态构造sql,但这看起来像是一个黑客.还有其他人有什么建议吗?
我的查询是:
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) 有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)
如果可以请告诉我
我有一个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)
任何帮助将非常感激!
我已经'param1, param2, parma3'从SSRS到存储过程作为varchar参数:我需要在查询的IN子句中使用它,但随后需要像这样首先更改其格式:
select *
from table1
where col1 in('param1', 'param2', 'param3')
Run Code Online (Sandbox Code Playgroud)
在不创建函数和参数表的情况下重新格式化参数的最佳方法是什么?
我正在尝试为删除编写存储过程。但是为了提高性能,我们已将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 ×6
t-sql ×6
sql-server ×5
delimiter ×2
parameters ×2
where-in ×2
.net ×1
checkboxlist ×1
delimited ×1
dynamic-sql ×1