【发布时间】:2012-03-13 15:28:05
【问题描述】:
我有这个问题
SELECT COUNT(Email) FROM Blacklist WHERE (Email = @email OR (Email like '@%' AND @email like '%' + Email)) AND (CustomerId = @cid OR CustomerId = -1)
我想看看黑名单中的值是否以@开头,如果是,我还想检查参数,看看它是否以黑名单中的值结尾。
(Email like '@%' AND @email like '%' + Email)
如果我像这样在表中一样声明变量,这在 SqlManager 中有效。
declare @email as nvarchar(200) = 'firstname.lastname@xyz.com'
declare @cid as integer = 2
SELECT COUNT(Email) FROM Blacklist WHERE (Email = @email OR (Email like '@%' AND @email like '%' + Email)) AND CustomerId = @cid
黑名单中的值为“@xyz.com”
如果我从 nvarchar(200) 中删除 (200) 部分,它将停止工作。
所以我的问题是如何从 .NET C# 解决这个问题?
db.AddParameter("@email", SqlDbType.NVarChar, email);
【问题讨论】:
-
为什么要删除长度?您应该总是声明长度。
Email的最长可能值是多少?您的代码声明不应该与表中列的定义相匹配吗? (博客参考:sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/…) -
如果您不指定长度,那么您的参数将默认为 1 个字符 的长度。如果您想要 1 个字符以外的内容,您需要指定长度。
-
我很抱歉解释不好,将尝试更新帖子。我声明变量的部分是 SQLmanager 中的一个测试,它正在工作。我希望相同的查询可以从 .NET 工作,这是我的问题。我无法从那里声明长度为 200 的参数。
-
@FredrikBerggren:当然可以!使用
db.AddParameter("@email", SqlDbType.NVarChar, 200).Value = email; -
@Fredrik Berggren:“db”变量是什么类型的?
标签: c# asp.net sql-server tsql sqldbtype