我正在尝试让这段代码工作,......
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
但我收到以下错误:
Ms Ms 2812,Level 16,State 62,Line 16
找不到存储过程''。
我试图把它放在存储过程中,但我什么也没得到。
答案 0 :(得分:4)
答案 1 :(得分:1)
您的方法受SQL注入。您需要使用参数化的sp_executesql或使用用户定义的表值函数并与其连接以获取数据
答案 2 :(得分:0)
如果您正在使用SQL Server 2008或更新版本,我建议您使用可以在用户表上加入的表值参数。那你就不需要任何动态SQL了。有关 here 的更多信息。
然后你的程序看起来像这样:
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