Sql server 2005 sqlserver中的动态sql连接

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上) 我该怎么做?还有

我有两个表之间的关系。这两个表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

您可以改为使用查找:

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时所想的。我知道我可以使用子查询,但这就是语法/实现。:)