技术开发 频道

在SQL Server2005中实现数组映射(三)



在SQL Server2005中实现数组映射(一)

在SQL Server2005中实现数组映射(二)

【IT168 专稿】

六、使用动态输入进行映射

    在本部分的例子中,我们可以考虑使用取代对用户ID的硬编码,而使用从一个用户表中获得用户子集的方式。为了做到这一点,首先建立一个用户表,代码如下:

CREATE TABLE [dbo].[Users]( [IDUser] int IDENTITY(1,1) NOT NULL, [LastName] varchar(50) NULL, [FirstName] varchar(50) NULL ) INSERT INTO dbo.Users VALUES ('Smith', 'A') INSERT INTO dbo.Users VALUES ('Jones', 'C') INSERT INTO dbo.Users VALUES ('Smith', 'B') INSERT INTO dbo.Users VALUES ('Smith', 'D') INSERT INTO dbo.Users VALUES ('Smithson', 'W') INSERT INTO dbo.Users VALUES ('Miller', 'R') INSERT INTO dbo.Users VALUES ('Smith', 'Q') INSERT INTO dbo.Users VALUES ('Rice', 'O')



下面的代码再次使用了上面建立的Permissions表,不过是从用户表中而不是从一个常量列表中获得的用户:

DECLARE @PERMS VARCHAR(50) SET @PERMS = '2,3,5' EXEC SP_map 'INSERT INTO Permissions VALUES( <MAIN_ARG>, <AUX_ARG>, 1)', @MainArray='SELECT IDUser from dbo.Users WHERE LastName LIKE ''Smith%''', @AuxArray=@PERMS, @Permute=1, @Verbose=1


    要注意的是用户列表仍然通过@MainArray参数传入,但是并不使用常量列表,而是使用了一个SELECT表达式。由于@Permute标志已经打开,SP_map演示了类似'Smith%'的所有组合(有五个),还有三个元素的@AuxArray列表。如图7所示:


 

 

 

 

 

 

0
相关文章