如何参数化包含IN
具有可变数量参数的子句的查询,比如这个?
SELECT * FROM Tags
WHERE Name IN ('ruby','rails','scruffy','rubyonrails')
ORDER BY Count DESC
Run Code Online (Sandbox Code Playgroud)
在此查询中,参数的数量可以是1到5之间的任何值.
我不希望为此(或XML)使用专用存储过程,但如果有一些特定于SQL Server 2008的优雅方式,我对此持开放态度.
使用SQL Server 2008,假设我有一个名为testing
80列的表,我想找到一个名为的值foo
.
我可以:
SELECT *
FROM testing
WHERE COLNAME = 'foo'
Run Code Online (Sandbox Code Playgroud)
是否有可能我可以查询所有80列并返回foo
包含在80列中任何一列中的所有结果?
提前致谢.
我搜索了很多,发现通常无法完成.我遇到了其中一个黑客:
http://www.bp-msbi.com/2011/04/ssrs-cascading-parameters-refresh-solved/
但它在2005年的ssrs中并不适合我.只是想知道是否有其他人在2005年尝试过它.或者是否还有其他可以尝试的黑客攻击.
根据本文,仅当第一个参数中的选择使其值无效时,依赖参数才会刷新.如果我们可以在每次参数更改时使相关参数无效,我们将强制执行完整刷新.一种简单的方法是附加一个值,例如使用NEWID()T-SQL函数获得的GUID.
所以基本上我们想在两个真实参数之间引入一个假参数.这个假参数应该每次返回新值,因为每次调用proc时,后面的storedproc都会为结果集添加一个guid.因此它强制完全刷新其他参数.
现在我面临的主要问题是:
设置此伪参数的默认值.对于可用值,伪param后面的storedproc运行并返回格式为data:result1,result2_GUIDFROMSQL的数据
现在看起来再次调用相同的storedproc来设置defult值,如果我要求它从查询中获取默认值.但是当再次运行storedproc时,会出现新的guid,因此无法找到旧值,因此无法按需设置.
我只需要找出一种机制将这个guid从引入的param传递给下一个param.
那就是我失败的地方.
我的问题可以简单地通过创建一个数据源为此查询字符串的param来复制.
select getdate() id, @name nid
Run Code Online (Sandbox Code Playgroud)
所以在这种情况下如何为此参数设置默认值.
你好,
我在将参数传递给“IN”子句时遇到问题。我正在使用以下查询。
询问:
SELECT Topics.Topic_Id FROM Topics
Where Topic_Description IN (''+ @Topics +'')
Run Code Online (Sandbox Code Playgroud)
当参数具有单个值时,此查询有效。我的参数可以有逗号分隔的多个值,例如:“一”、“二”、“三”、“四”。但是只要有多个参数,查询就会失败。如何克服这个?请建议。
谢谢
我必须将上述内容用作存储过程的一部分。我必须将选择查询的结果放入如下游标中:
DECLARE cur_TopicIDs CURSOR FOR SELECT Topics.Topic_Id FROM Topics Where Topic_Description IN (''+ @Topics +'')....等
在这种情况下,我如何按照其他链接中的建议使用动态 sp
我正在创建一个脚本,我使用IN关键字查询表.当我在IN子句中键入数据时,查询按我的意愿执行.但是当我创建一个包含完全相同数据的变量并使用IN子句中的变量时,它却没有.有任何想法吗???
这是有效的查询
SELECT *
FROM scpcommandeventlog
WHERE MESSAGEid = 3
AND PARAM1 IN('11416407','11416410','11416413','11416417',
'11416419','11416421','11416423','11416427',
'11416432','11416433','11416434','11416435',
'11416438','11416443','11416446','11416448',
'11416451','11416454','11416458','11416462')
Run Code Online (Sandbox Code Playgroud)
这是没有的查询
SELECT * FROM scpcommandeventlog WHERE MESSAGEid = 3 AND PARAM1 IN(@list)
Run Code Online (Sandbox Code Playgroud)
以下是填充@list变量的查询
DECLARE @List varchar(max)
SELECT @List = isnull(@List + ',', '') + '''' + cast(itemid as varchar) + ''''
FROM dbo.ItemList
WHERE sortid LIKE @sortid
Run Code Online (Sandbox Code Playgroud)