使用静态元素插入|动态|选择|随机|&;顶部测量良好
本文关键字:amp 顶部 测量 选择 静态 元素 插入 动态 随机 | 更新日期: 2023-09-27 17:58:02
嗨,我正在做一个奇怪的项目,这个项目把我带到了一些奇怪的地方,我又来了。本质上,搜索大约100个奇怪的控件(每个控件都可以嵌套多个或的标准)(多选列表框)。。。我不喜欢使用动态SQL,但由于应用程序的性质,我发现有必要编写一个相当短的C#后端(这是在ASP中),检查选择了哪些控件,获取控件的名称值(这是列名),并构建一个动态where子句。。。实例
SELECT TOP 50000 [lname] as 'last',[fname] as 'first',[phone],[wphone],[fax],[cellphone],[email],[state],[zip],[state_w],[zip_w],[employer],CONVERT(char, [datebirth], 101) FROM [RT2DBSQL_Review].[dbo].[Respondent] WHERE (education = '5' ) and (race = 'H' ) and (hours = '1' ) and (',' + CC5 like '%,2,%' or ',' + CC5 like '%,26,%' or ',' + CC5 like '%,12,%') and (',' + CC6 like '%,9,%' or ',' + CC6 like '%,23,%') and (',' + CC4 like '%,Nintendo DS,%') and (gender = 'M') AND Pro_resp is null
选中此项并绑定一个网格以显示匹配的人员。
下一步是。假设有1000名可行的申请者,选择x个随机申请者,并从受访者表中插入动态值(见下文)、静态职位编号、静态配额,同时输入疯狂的ass-where子句。我有这方面的所有单独部分,但我正忙于将其结合起来。
类似:
CREATE PROCEDURE TEMPTEMP
@jobnum varchar(100),
@quota varchar(100),
@X int,
@Dynamic varchar(max)
AS
INSERT INTO [RT2DBSQL_Review].[dbo].[tbl_job_respondents]
([job_resp_job_number]
,[job_resp_respondent]
,[job_resp_name]
,[job_resp_phone]
,[job_resp_wphone]
,[job_resp_wphone_ext]
,[job_resp_cellphone]
,[job_resp_call_status]
,[job_resp_scheduled]
,[job_resp_recruited_by]
,[job_resp_part_status]
,[job_resp_coop_amt]
,[job_resp_amt_paid]
,[job_resp_status]
,[job_resp_part_check_no]
,[job_resp_session]
,[job_resp_date_pulled]
,[job_resp_date_recruited]
,[job_resp_quota]
,[job_resp_source]
,[job_resp_confirmed]
,[job_resp_referred_by]
,[query_print_field]
,[job_resp_exported]
,[job_resp_notes]
,[job_resp_childname])
VALUES
(@jobnum
,(Select TOP (@X) RecordId
,lname + ', ' + fname
,phone
,wphone
,wphone_ext
,cellPhone
,'0' --static
,0 --static
,'' --static
,'' --static
,0 --static
,0 --static
,'0' --static
,null--static
,null--static
,GETDATE()
,GETDATE()
,@quota
,'Q' --static
,null--static
,null--static
,0 --static
,0 --static
,null
,null/*static*/FROM Respondent
WHERE @Dynamic
ORDER BY NEWID()))
GO
另一种选择是将select上的所有内容加载到数组列表中??有什么想法吗?我脑子里有个屁。
提前感谢的帮助
首先,我强烈建议您将SQL视为任何其他代码,并为其添加一致的格式。
也就是说,下面的技巧应该从你已经拥有的50000条第一条记录中随机挑选1000条。
SELECT TOP(1000) *
FROM (
SELECT TOP 50000 [lname] as 'last'
, [fname] as 'first'
, [phone]
, [wphone]
, [fax]
, [cellphone]
, [email]
, [state]
, [zip]
, [state_w]
, [zip_w]
, [employer]
, CONVERT(char, [datebirth], 101)
, RAND() as priority
FROM [RT2DBSQL_Review].[dbo].[Respondent]
WHERE (education = '5' )
AND (race = 'H' )
AND (hours = '1' )
AND (',' + CC5 like '%,2,%' or ',' + CC5 like '%,26,%' or ',' + CC5 like '%,12,%')
AND (',' + CC6 like '%,9,%' or ',' + CC6 like '%,23,%')
AND (',' + CC4 like '%,Nintendo DS,%') and (gender = 'M')
AND Pro_resp is null
) full_sample
ORDER BY priority
基于此,创建插入应该不会太糟糕。(这会很混乱,但有时这就是生活。更重要的是,这是一个重复的混乱,重复意味着你可以将其模板化。)