2

这是我下面的存储过程。我将@CultureCode参数与视图名称连接起来,即 [_0002HR_EmployeeNames_ en-US _View]。部分 en-US 将通过名为 的参数传递@CultureCode。有什么办法可以这样做,因为我要求不使用动态查询。谢谢你。

CREATE PROCEDURE [dbo].[_001HR_Report_Loans] (@Parameters VARCHAR(max))
 AS
 DECLARE @ReportOption VARCHAR(5)    SET @ReportOption     = [dbo].DB_Split(@Parameters, 1) 
 DECLARE @CultureCode VARCHAR(10)    SET @CultureCode      = [dbo].DB_Split(@Parameters, 2) 
 DECLARE @ShowItems VARCHAR(5)       SET @ShowItems        = [dbo].DB_Split(@Parameters, 3) 
 DECLARE @StartDate NVARCHAR(8)      SET @StartDate        = [dbo].DB_Split(@Parameters, 4) 
 DECLARE @EndDate NVARCHAR(8)        SET @EndDate          = [dbo].DB_Split(@Parameters, 5) 
 DECLARE @EmployeeCode NVARCHAR(30)  SET @EmployeeCode     = [dbo].DB_Split(@Parameters, 6) 
 DECLARE @BranchCode NVARCHAR(30)    SET @BranchCode       = [dbo].DB_Split(@Parameters, 7) 

 --IF @StartDate = ''
    -- SET @StartDate = NULL


 SELECT HR.*, EN.[Name] AS EmployeeName
 FROM [0002HR_EmployeeLoans] HR  
 LEFT JOIN [_0002HR_EmployeeNames_ + '@CultureCode' +_View]  EN ON HR.EmployeeCode = EN.EmployeeCode 
 LEFT JOIN [_0002HR_EmployeePackagesView]  EP ON EP.EmployeeCode = HR.EmployeeCode

 WHERE 
(HR.EmployeeCode = @EmployeeCode OR @EmployeeCode IS NULL)
AND
(EP.BranchCode = @BranchCode OR @BranchCode IS NULL)
AND
(HR.Date BETWEEN @StartDate AND @EndDate OR @StartDate IS NULL AND @EndDate IS NULL) 
AND
(HR.Date >= @StartDate OR @StartDate IS NULL)
AND
(HR.Date  <= @EndDate OR @EndDate IS NULL)
4

2 回答 2

1

因此,您可以查看每种语言。他们从表格中获取特定语言的数据。但是现在您要编写一个不特定于语言的过程。

解决方案似乎很简单:不要使用语言视图,而是直接访问表。(或者构建一个使用 . 查询的所有语言视图where language = @language。)

于 2016-01-21T13:40:57.280 回答
1

到目前为止,这在 T-SQL 中是不可能的。TOP不能参数化诸如子句、表或列名之类的东西。

一种方法是创建union所有可能的表/视图,添加一个与表/视图名称匹配的新列并过滤它。

像这样:

SELECT * FROM
(
    SELECT 'Table1' as TableName, t1.* FROM Table1 t1 WHERE ...
    UNION ALL
    SELECT 'Table2' as TableName, t2.* FROM Table2 t2 WHERE ...
) tmp
WHERE TableName = @tableName

另一种(可能是最“干净”的方式)是只有一个表并将区域性设为该表中的列,因此您只需传递正确的区域性字符串即可过滤该列。

于 2016-01-21T13:33:35.970 回答