【发布时间】:2016-01-06 09:10:26
【问题描述】:
我的数据库中有几个格式为 PREFIX_FeatureName 的表。例如:
Processed_CallingCountry(featureName nvarchar(max) null, escalatedCount int null, featureValue nvarchar(max) null, RequestNumber int null)-
Processed_CallingCity(featureName nvarchar(max) null, escalatedCount int null, featureValue nvarchar(max) null, RequestNumber int null)[...]
目前,每个表都有一个存储过程,用于计算特征并将其插入到正确的表中。每个功能的处理代码几乎相同,功能名称不同。
例子:
SELECT
(SELECT SUM(IsSpecial)
FROM [dbo].[FeaturesBase]
WHERE CreatedTime < a.CreatedTime
AND CallingCountry = a.CallingCountry ) AS EscalatedCount,
'CallingCountry' AS FeatureName,
RequestNumber,
CallingCountry AS FeatureValue
FROM
[dbo].[CssFeaturesBase] a
此代码为所有功能复制粘贴,仅更改功能名称 - 在前面的示例中,“CallingCountry”将替换为其他字符串,每个存储过程一个。
有没有一种方法可以创建一个将字符串作为输入的存储过程,并使用字符串/nvarchar 作为参数进行计算?
基本上,我该怎么做:
CREATE PROCEDURE process (@featureName nvarchar(max))
AS
BEGIN
SELECT INTO ('Processed' + @featureName) -- use the table defined by the string
(SELECT SUM(IsSpecial)
FROM [dbo].[FeaturesBase]
WHERE CaseCreatedTime < a.CaseCreatedTime
AND @featureName = a.@featureName) AS EscalatedCount, --use @featureName as column name
@featureName AS FeatureName, --use the string literal here
RequestNumber,
@featureName AS FeatureValue --select the proper value
FROM
[dbo].[FeaturesBase] a
【问题讨论】:
-
您需要动态 SQL。这是一个例子:stackoverflow.com/a/11108520/3854195
-
表中所有行的 FeatureName 是否相同?表名的 FeatureName 部分与插入到表中的 FeatureName 字段中的值相同吗?
标签: sql sql-server stored-procedures