在数据库中,我有一个包含“default”的字符串。我只想将该默认值替换为0.我有类似的东西:
select * from tblname where test = 'default'
我不想在替换“默认”时引用。
我想要
select * from tblname where test = 0
有没有办法做到这一点?
答案 0 :(得分:4)
我假设字段test
是文本类型(varchar,char等)。
首先:更新表格以包含'0',其中包含'default'。
UPDATE tblname SET test = '0' WHERE test = 'default'
然后:选择其中包含“0”的所有行。你不能不引用引号,因为它们是SQL语法的一部分。
SELECT * FROM tblname WHERE test = '0'
为了能够取消引号,您必须将字段转换为数字字段(int,float等)。
答案 1 :(得分:0)
我认为你最好使用格式字符串
string myVar = "0";
string sql = String.Format(@"select * from tblname where test = \"{0}\"", myVar);
您还应该问自己为什么要动态生成内联SQL而不使用存储过程,因为除非您清理输入,否则会发生SQL注入攻击。
答案 2 :(得分:0)
为了实现简单的字符串替换,您可以执行许多操作;但是,我强烈建议您查看参数化,以提供注入安全性和查询计划重用。
参数也可以通过避免引用问题而受益 - 所以只需将'default'
替换为(例如)@p1
并进行排序即可。这个替换可以是:
-- TSQL
REPLACE(@cmd, '''default''', '@p1')
或
// C#
.Replace(@"'default'", @"@p1")
从C#开始,这将带有DbCommand
参数;从T-SQL您可能会考虑sp_ExecuteSQL
。无论哪种方式,你最终都希望:
select * from tblname where test = @p1
并提供@ p1作为参数。所以来自C#:
DbParameter param = cmd.CreateParameter();
param.Value = 0; // etc
cmd.Parameters.Add(param);
或者来自TSQL:
EXEC sp_ExecuteSQL @cmd, N'@p1 varchar(50)', 0
(用正确的类型替换varchar(50)
)