Sql server 2005 sqlserver中的动态sql连接
我有两个表之间的关系。这两个表PKs是int类型 在一个表(UserS)中,我需要提供用户名并获取相应的ID(即PK)。这是使用表单身份验证时的标准ASP.NET用户表 但是,在一个相关的表中,我想提供从Users表中找到的ID,以获取一个值 比如: 运行查询以获取用户名的ID(简单的选择/何处查询) 返回结果 运行一个子查询,我可以在其中传递上述结果- 获取ID=result的值 这听起来很像动态sql。但是,可能有一种更合适的方式来编写此查询(在SQLServer2K5上) 我该怎么做?还有什么陷阱 编辑:我将尝试一些类似于 编辑:谢谢大家的提示,我写了以下内容: 选择折扣。折扣挂载 打折 内部连接aspnet\u用户 在Discount.DiscountCode=aspnet\u Users.UserId和aspnet\u Users.Username='s' 其中“s”将由参数替换Sql server 2005 sqlserver中的动态sql连接,sql-server-2005,tsql,Sql Server 2005,Tsql,我有两个表之间的关系。这两个表PKs是int类型 在一个表(UserS)中,我需要提供用户名并获取相应的ID(即PK)。这是使用表单身份验证时的标准ASP.NET用户表 但是,在一个相关的表中,我想提供从Users表中找到的ID,以获取一个值 比如: 运行查询以获取用户名的ID(简单的选择/何处查询) 返回结果 运行一个子查询,我可以在其中传递上述结果- 获取ID=result的值 这听起来很像动态sql。但是,可能有一种更合适的方式来编写此查询(在SQLServer2K5上) 我该怎么做?还有
谢谢您不必为此使用动态SQL 您可以改为使用查找:
DECLARE @ID bigint
SELECT @ID = ID FROM Users WHERE Username = @Username
SELECT
*
FROM
TableB
WHERE
ID = @ID
然后,您可以将参数@Username添加到SqlCommand对象中,以防止SQL注入的风险
此外,执行查找比连接更可取,因为对于TableB,索引只扫描一次。您不必为此使用动态SQL 您可以改为使用查找:
DECLARE @ID bigint
SELECT @ID = ID FROM Users WHERE Username = @Username
SELECT
*
FROM
TableB
WHERE
ID = @ID
然后,您可以将参数@Username添加到SqlCommand对象中,以防止SQL注入的风险
此外,查找比连接更可取,因为索引只扫描一次,对于TableB。这只是一个简单的连接,不是吗
SELECT x.*
FROM user_table u
INNER JOIN
other_table x
ON u.id = x.user_id
WHERE u.name = @user_name
这只是一个简单的连接,不是吗
SELECT x.*
FROM user_table u
INNER JOIN
other_table x
ON u.id = x.user_id
WHERE u.name = @user_name
好的,我会这样做:
SELECT *
FROM TableB
JOIN Users ON Users.Id = TableB.ID
WHERE Users.Username = @Username
好的,我会这样做:
SELECT *
FROM TableB
JOIN Users ON Users.Id = TableB.ID
WHERE Users.Username = @Username
关于查找与连接-虽然新手使用查找似乎更直观,但您应该使用连接。需要对主结果集中的每一行计算查找,而对联接计算一次。联接效率更高,这意味着它们更快。关于查找与联接-虽然新手使用查找似乎更直观,但您应该使用联接。需要对主结果集中的每一行计算查找,而对联接计算一次。联接效率更高,这意味着它们更快。为什么不直接联接这两个表呢?他们有关系吗?为什么不把这两张桌子连在一起呢?它们相关吗?这正是我提到动态sql时所想的。我知道我可以使用子查询,但这就是语法/实现。:)这正是我在提到动态sql时所想的。我知道我可以使用子查询,但这就是语法/实现。:)