选择一个变量表名称

时间:2018-10-22 15:39:20

标签: sql tablename

我正在尝试为Microsoft Dynamics Nav数据库的查询编写一些SQL语句。我正在尝试编写可以在不同Nav数据库中轻松使用的脚本。每个数据库的表名都是唯一的,因为它们在表名中始终带有客户名,后跟 $ tablename。因此,例如,如果公司名称为ABC Company,则表Rating为 ABC Company $ Rating,然后在XYZ Company的另一个数据库中 XYZ Company_ $评级。 有什么建议吗?

2 个答案:

答案 0 :(得分:0)

我发现了一种使用动态SQL的方法(尽管确实很笨拙)。不利之处在于,编写简单的select语句需要花费大量代码,并且不像正常脚本那样检查脚本上下文中的错误:

声明@Company表     (     id INT IDENTITY,     名称NVARCHAR(30)     )

INSERT INTO @Company (Name)
SELECT Name FROM Company

declare @Script varchar(max) = 'select * from [[$Company$]$Customer]'
DECLARE @script2 VARCHAR(MAX)

DECLARE @CompanyCount int = (SELECT COUNT(Name) FROM @Company)
DECLARE @Row INT = 0

DECLARE @CompanyName NVARCHAR(30)

WHILE @Row <= @CompanyCount
BEGIN
SET @Row = @Row + 1
SET @companyName = (SELECT TOP 1 Name FROM @Company WHERE id = @Row)
SET @CompanyName = REPLACE(@CompanyName, '.', '_')
SET @script2 = REPLACE(@script, '[$Company$]', @CompanyName)    
EXEC (@script2)
end 

答案 1 :(得分:0)

我不清楚为什么表名不同,因为每个客户表似乎都在不同的数据库中。如果您可以避免为每个客户分别命名不同的表,则建议您这样做。

但是,如果您必须提供这些以客户为中心的表名称,也许您还可以为每个具有“基本”表名称的表创建一组视图,例如

create view Rating as select * from ACME$Rating;

然后使用这些视图编写所有脚本。