1

我正在尝试使此代码正常工作,...

SELECT *
FROM UserInGroup

DECLARE @SqlQuery nvarchar(500),
    @userIds nvarchar(50),
    @GroupId nvarchar(50);

SET @userIds = '1, 2';
SET @SqlQuery = 
            'INSERT INTO UserInGroup
            (GroupId, UserId)
            SELECT ' + @GroupId + ', UserId
            FROM [User]
            WHERE UserId IN ('+ @userIds +')';

EXECUTE @SqlQuery
GO

SELECT *
FROM UserInGroup

但我收到以下错误:

消息 2812,级别 16,状态 62,第 16 行
找不到存储过程“”。

我试图把它放在一个存储过程中,但我什么也没得到。

4

3 回答 3

4

你需要改变你的执行方式

EXECUTE @SqlQuery to ->> Exec (@SqlQuery)

您可能会在此处详细了解EXECUTE (Transact-SQL)

于 2013-11-01T16:41:18.833 回答
1

您的方法受 SQL 注入的影响。您需要使用参数化的 sp_executesql 或使用用户定义的表值函数并与其连接以获取数据

于 2013-11-01T16:49:08.320 回答
0

如果您使用的是 SQL Server 2008 或更新版本,我鼓励您使用可以加入用户表的表值参数。那么您将不需要任何动态 SQL。更多关于这里

那么您的程序可能如下所示:

Create procedure myBrandNewProcedureUsingTableValuedParameters
    @userIds myCustomTableType readonly,
    @GroupId nvarchar(50)
AS
BEGIN
  INSERT INTO UserInGroup
  (GroupId, UserId)
  SELECT  @GroupId, [User].UserId
  FROM [User]
  INNER JOIN
  @userIds as u
  on [User].UserID = u.UserID
END
于 2013-11-01T16:55:23.480 回答