C# 存储过程更改where子句语句
我有一个关于sql语句的问题。可以用这种方式进行查询吗?我需要筛选一个where子句,该子句取决于@user\u id的值C# 存储过程更改where子句语句,c#,sql,sql-server,C#,Sql,Sql Server,我有一个关于sql语句的问题。可以用这种方式进行查询吗?我需要筛选一个where子句,该子句取决于@user\u id的值 ALTER PROCEDURE [dbo].[getUserAddress] @user_id int = null AS SELECT user_id, state_code, address from UserAddress IF(@user_id > 10) BEGIN WHERE state_code = 'CA' END ELSE WHERE
ALTER PROCEDURE [dbo].[getUserAddress]
@user_id int = null
AS
SELECT user_id, state_code, address from UserAddress
IF(@user_id > 10)
BEGIN
WHERE state_code = 'CA'
END
ELSE
WHERE address = 'HILLS'
END
我试图这样做,但这似乎不是一个标准的方式
IF(@user_id > 10)
BEGIN
SELECT user_id, state_code, address from UserAddress WHERE state_code = 'CA'
END
ELSE
SELECT user_id, state_code, address from UserAddress WHERE address = 'HILLS'
END
请告知此概念的最佳方法。请帮忙。
谢谢您在您的
else
之后缺少一个开始
。试试这个:
IF(@user_id > 10)
BEGIN
SELECT user_id, state_code, address from UserAddress WHERE state_code = 'CA'
END
ELSE
BEGIN
SELECT user_id, state_code, address from UserAddress WHERE address = 'HILLS'
END
您可以简化:
select
user_id,
state_code,
address
from
UserAddress
where
(@user_id > 10 and state_code = 'CA') or
(@user_id IS NULL OR (@user_id <= 10 and address = 'HILLS'))
选择
用户id,
州代码,
地址
从…起
用户地址
哪里
(@user_id>10,状态代码='CA')或
(@user\u id为NULL或(@user\u id而不是在where语句中使用此用例):
SELECT user_id, state_code, address from UserAddress WHERE
(case when @user_id > 10 then state_code else address end)
= (case when @user_id > 10 then 'CA' else 'HILLS' end)
还可以在存储过程中使用动态sql查询
查询
declare @sql as varchar(max);
select @sql = 'select * from [UserAddress] '
+ stuff((select case when @user_d > 10
then 'where state_code= ''CA'''
else 'where address = ''Hills''' end
for xml path('')), 1,0,'')
exec(@sql);
试试这个
SELECT user_id, state_code, address from UserAddress
WHERE
((WHERE state_code = 'CA') AND (@user_id > 10))
OR
((WHERE address = 'HILLS') AND (@user_id <= 10))
从UserAddress中选择用户id、状态代码、地址
哪里
((其中state_code='CA')和(@user_id>10))
或
((其中地址='HILLS')和(@user_id您可以简单地
WHERE
(@user_id > 10 AND state_code = 'CA')
OR ((@user_id <= 10 OR @user_id IS NULL) AND address = 'HILLS')
您可以尝试以下方法:
更改过程[dbo].[getUserAddress]
@用户id int=null
作为
开始
声明@sql nvarchar(5000)
set@sql='SELECT user\u id、state\u code、UserAddress'中的地址
如果(@user_id>10)
开始
设置@sql=@sql+,其中state_code=''CA'
结束
否则
设置@sql=@sql+,其中地址为“HILLS”
结束
Exec(@sql)
结束您使用的是MySQL还是MS SQL Server?(不要标记未涉及的产品。)如果您使用的是MySQL,也就是@jarlh所说的您需要指定的,请选择您应该遵循的顺序在哪里!只有两个条件吗?您认为将来需要添加更多条件吗?是的,我可能会在将来添加可能的条件这是错误的!如果(地址='HILLS')
是真的对@user\u id
的检查被忽略了这仍然不等于OP所要求的(因为是空的),但已经足够接近了。逆转我的否决票。我想我的大脑一定被炸了。感谢你们两位指出了逻辑缺陷(已经修复)。我喜欢这种方式,非常聪明的恭维。
IF @user_id > 10
SELECT user_id, state_code, address from UserAddress WHERE state_code = 'CA'
ELSE
SELECT user_id, state_code, address from UserAddress WHERE address = 'HILLS'