【发布时间】:2017-05-02 08:11:21
【问题描述】:
我有一个动态查询,其中选择列是动态准备的。由于这是一个通用代码并且我有一些特定的列选择,我必须根据我的查询放置别名。 为此,我不得不使用字符串替换。
我想知道 SQL Server 中是否有一个规定可以解决不带别名的不明确列。
即当有歧义时,总是从 Table1 中获取值。
DECLARE @ColumnNames VARCHAR(1000)
DECLARE @SQLStmt VARCHAR(MAX)
--下面我正在获取以逗号分隔的列名列表 'Id,Name,Salary'....
SELECT @ColumnNames = testDB.dbo.testfuncion(45)
SET @SQLStmt = 'SELECT '+@ColumnNames+' FROM Table1 LEFT Join Table2 ON Table1.ID = Table2.ID'
两个表中都存在名称,但可以说表 2 的匹配记录较少。所以我一直想从 Table1 中获取 Name。
无论如何,我们可以使用任何内置子句在一个特定表上设置首选项。
【问题讨论】:
-
查询不清楚。您不需要使用任何类型的字符串替换来执行查询 - 这是引入转换或 SQL 注入漏洞的可靠方法。
AS someOtherName关键字已经可以使用别名。看起来生成查询的 code 失败了。为什么不直接使用支持 LINQ 的 ORM,比如 EF? -
不,没有自动化...由于您的查询是动态生成的,您可以使用带有表名的通用别名(例如
AS Table1_Name),或者您可以使用Table1.*并添加Table2的所有列,在INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='Table1'中找不到它们的名称 -
table two has less matching records=> 这句话没有任何意义。匹配的记录在两个表中都是通用的。你是说桌数吗? -
抱歉,没有功能会自动优先选择同名的一列。
-
这个函数在做什么:
testDB.dbo.testfuncion(45)?45是什么?我很确定,您的问题有更好的解决方案。阅读XY-Problem
标签: sql-server tsql aliases