如何在SQL Server 2005中编写存储过程,以便通过添加前缀来显示重复的列名?
示例:如果我将“其他”作为属于多个类别的列名称映射到另一个具有“MyColumn”,“YourColumn”列的表。我需要加入这两个表,以便我的输出应该是'M_Others'和'Y_Others'。我可以使用一个案例,但我不确定表中是否有任何其他重复的列。如何动态地写出来知道重复?
提前致谢
答案 0 :(得分:1)
您应该在查询的投影中使用别名:(虚假示例,显示用法)
SELECT c.CustomerID AS Customers_CustomerID, o.CustomerID AS Orders_CustomerID
FROM Customers c INNER JOIN Orders o ON c.CustomerID = o.CustomerID
答案 1 :(得分:1)
如果不使用动态SQL,则无法动态更改列名。
您必须明确别名。在此查询中无法更改“A_Others”或“B_Others”:
SELECT
A.Others AS A_Others,
B.Others AS B_Others
FROM
TableA A
JOIN
TableB B ON A.KeyCol = B.KeyCol
答案 2 :(得分:1)
如果重复的列包含相同的数据(即它们是连接字段),则不应该在查询中同时发送这两个数据,因为这是一种不好的做法,并且浪费了服务器和网络资源。您不应该在生产查询中使用select *,尤其是在有连接的情况下。如果您正在编写SQL代码,那么当您有两个具有相同名称且意味着不同内容的列时(例如,如果您连接两次到person表,一次获取医生名称并且一次获得病人姓名)。从系统表动态执行此操作不仅效率低下,而且最终会给您带来很大的安全漏洞,具体取决于您编写代码的程度。您希望通过永久影响每个用户的性能并可能对数据安全性造成负面影响,在开发中节省五分钟或更短时间。这就是数据库人员所说的坏事。
答案 3 :(得分:0)
选择n.id_pk,
(groupcount.n_count> 1然后substring(m.name,1,1)+'_'+ n.name的情况
否则n.name结束)
来自test_table1 m
在m.id_pk = n.id_fk上左连接test_table2 n
左连接(选择名称,计数(名称)为n_count
来自test_table2 group by name)
groupcount on n.name = groupcount.name