Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 通过在SQLServer2005中向重复的列名添加前缀来获取重复的列名_Sql Server - Fatal编程技术网

Sql server 通过在SQLServer2005中向重复的列名添加前缀来获取重复的列名

Sql server 通过在SQLServer2005中向重复的列名添加前缀来获取重复的列名,sql-server,Sql Server,如何在SQLServer2005中编写存储过程,以便通过添加前缀来显示重复的列名 示例:如果我将'Others'作为属于多个类别的列名,并映射到另一个列为'MyColumn'的表,则为'YourColumn'。我需要连接这两个表,以便我的输出应该是“M_Others”和“Y_Others”。我可以使用case,但我不确定表中是否有任何其他重复列。如何动态地写这些来了解重复 提前感谢您应该在查询的投影中使用别名:伪示例,显示用法 SELECT c.CustomerID AS Customers_C

如何在SQLServer2005中编写存储过程,以便通过添加前缀来显示重复的列名

示例:如果我将'Others'作为属于多个类别的列名,并映射到另一个列为'MyColumn'的表,则为'YourColumn'。我需要连接这两个表,以便我的输出应该是“M_Others”和“Y_Others”。我可以使用case,但我不确定表中是否有任何其他重复列。如何动态地写这些来了解重复


提前感谢

您应该在查询的投影中使用别名:伪示例,显示用法

SELECT c.CustomerID AS Customers_CustomerID, o.CustomerID AS Orders_CustomerID
FROM Customers c INNER JOIN Orders o ON c.CustomerID = o.CustomerID

您应该在query:bogus示例的投影中使用别名,显示用法

SELECT c.CustomerID AS Customers_CustomerID, o.CustomerID AS Orders_CustomerID
FROM Customers c INNER JOIN Orders o ON c.CustomerID = o.CustomerID

如果不使用动态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

如果不使用动态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
选择n.id\u pk, groupcount.n_count>1,然后substringm.name,1,1+''.'+n.name时的情况 其他名称结束 来自测试表1 m 左连接测试\u表2 m.id上的n\u pk=n.id\u fk 左连接选择名称,countname作为n\u计数 从test_表2按名称分组 n.name上的groupcount=groupcount.name

选择n.id\u pk, groupcount.n_count>1,然后substringm.name,1,1+''.'+n.name时的情况 其他名称结束 来自测试表1 m 左连接测试\u表2 m.id上的n\u pk=n.id\u fk 左连接选择名称,countname作为n\u计数 从test_表2按名称分组
n.name=groupcount.name上的groupcount

如果重复的列包含相同的数据,即它们是联接字段,则无论如何都不应该在查询中同时发送这两个字段,因为这是一种糟糕的做法,并且浪费了服务器和网络资源。在生产查询中不应使用select*,尤其是在存在联接的情况下。如果您正确地编写了SQL代码,那么当有两个同名的列表示不同的内容时,您可以使用别名。例如,如果您两次加入person表,一次加入医生名,一次加入患者名。从系统表中动态执行此操作不仅效率低下,而且可能会给您带来一个很大的安全漏洞,这取决于您编写代码的糟糕程度。您希望通过永久性地影响每个用户的性能并可能对数据安全造成负面影响,从而在开发过程中节省五分钟或更少的时间。这是数据库用户所说的一件坏事。

如果重复的列包含相同的数据,即它们是联接字段,则无论如何都不应该在查询中同时发送这两个字段,因为这是一种糟糕的做法,并且浪费了服务器和网络资源。在生产查询中不应使用select*,尤其是在存在联接的情况下。如果您正确地编写了SQL代码,那么当有两个同名的列表示不同的内容时,您可以使用别名。例如,如果您两次加入person表,一次加入医生名,一次加入患者名。从系统表中动态执行此操作不仅效率低下,而且可能会给您带来一个很大的安全漏洞,这取决于您编写代码的糟糕程度。您希望通过永久性地影响每个用户的性能并可能对数据安全造成负面影响,从而在开发过程中节省五分钟或更少的时间。这是数据库人所说的一件坏事。

谢谢你的建议,但这里的问题是我不确定数据库中有哪些代表列。如果存在任何列的代表,那么我需要有一个前缀,该前缀应该取自连接表列中的列。我想你的查询写为:SELECT*从…起在这种情况下,请重新考虑填写完整的查询。这将自动解决您的问题,因为您可以写出列名。您正在编写一个存储过程,因此该存储过程是固定的,这意味着它不会更改。因此,写出列的名称。确定如果有人更改了使用的表,您的进程将失败,但这是不可避免的,除非更改表的人与编写进程的人进行通信。感谢您的回复,但这里的问题是,我不确定数据库中有哪些repitive列。如果存在columnae的任何repition,那么我需要从连接表中的列中获取前缀Column我猜您的查询写为:SELECT*FROM?在这种情况下,请重新考虑填写完整的查询。这将自动解决您的问题,因为您可以写出列名。您正在编写一个存储过程,因此该存储过程是固定的,这意味着它不会更改。写出c的名字
专栏。当然,如果有人更改所使用的表,您的进程将失败,但这是不可避免的,除非更改表的人与编写进程的人进行通信。选择M.ID_PK,当N.NAME='others'时为case,然后选择substring M.NAME,1,1+''''+N.NAME ELSE N.NAME结束于TEST_table 1 M,NOLOCK left join TEST_table 2 N on M.ID_PK=N.ID_FK这是一个查询,我们正在检查重复的列名,但这里它是硬编码的。如果存在另一个我们不知道的重复列,那么如果我们在存储的列中使用此查询,则会发生错误procure.so是否有任何方法可以找到在后端动态生成并需要在静态存储过程中处理的报表,是否要查找数据库中具有相同名称的所有列?或者确保存储过程输出提供唯一的名称?我希望所有列名和存储过程都应向重复的列添加前缀,并在不添加任何前缀的情况下显示其他列。只有重复的列需要添加前缀SELECT M.ID_PK,CASE当N.NAME-多次出现-然后substringM.NAME,1,1+''+N.NAME ELSE N.NAME从TEST_table 1 M结束,NOLOCK LEFT JOIN TEST_table 2 N ON M.ID_PK=N.ID_FK在这个查询中,我需要有一个条件来获取重复的列select M.ID_PK,CASE当N.NAME='others'然后substringM.NAME,1,1+''''+N.NAME ELSE N.NAME结束于TEST_table 1 M,NOLOCK left join TEST_table 2 N on M.ID_PK=N.ID_FK这是一个查询,我们正在检查重复的列名,但这里它是硬编码的。如果存在另一个我们不知道的重复列,那么如果我们在存储的列中使用此查询,则会发生错误procure.so是否有任何方法可以找到在后端动态生成并需要在静态存储过程中处理的报表,是否要查找数据库中具有相同名称的所有列?或者确保存储过程输出提供唯一的名称?我希望所有列名和存储过程都应向重复的列添加前缀,并在不添加任何前缀的情况下显示其他列。只有重复的列需要添加前缀SELECT M.ID_PK,如果N.NAME多次出现,则子字符串M.NAME,1,1+'''+N.NAME ELSE N.NAME从TEST_TABLE1 M结束,在M.ID_PK=N.ID_FK上NOLOCK LEFT JOIN TEST_TABLE2 N在此查询中,我需要有一个条件来获取重复的列