将选定的列名存储在用户定义的表中

时间:2015-10-26 08:14:52

标签: sql sql-server sql-server-2008

我目前在用户定义的表格中指定的列中搜索值时遇到问题。我已经获得了我的.NET程序,我在其中定义了要搜索的参数。我已经确定实现此目的的最佳方法是将此值(选定列)存储在列表中。现在我必须做那样的事情:

SELECT
    @MyColumnNamesInAList <- I do not know how to iterate it properly
FROM 
    xyz

此外,如果xyz中没有相应的列,我必须插入NULL。

在C#代码中我会做这样的事情:

foreach(var column in MyColumnNamesInAList)
{
    if(!xyz.Contains(column)
        "NULL AS " + column.Name;
}

2 个答案:

答案 0 :(得分:1)

  

@MyColumnNamesInAList&lt; - 我不知道如何正确迭代

DECLARE @MyColumnNamesInAList VARCHAR(50) = 'ID,Name'
DECLARE @xml AS XML
SET @xml = CAST(('<X>'+REPLACE(@MyColumnNamesInAList,',' ,'</X><X>')+'</X>') AS XML)
SELECT N.value('.', 'varchar(10)') AS Columns FROM @xml.nodes('X') AS T(N)

/ *

Columns
--------
ID
Name

* /

  

在C#代码中我会做这样的事情:

     

foreach(MyColumnNamesInAList中的var列)

     

{

if(!xyz.Contains(column)

    "NULL AS " + column.Name;
     

}

考虑我们有一个表格

CREATE TABLE [dbo].[tblTesttable]([ID] [int] IDENTITY(1,1) NOT NULL,[Name] [varchar](50) NULL)

现在如果我们执行以下查询,我们可以找出额外的列 -

DECLARE @MyColumnNamesInAList VARCHAR(50) = 'ID,Name,NewColumn1,NewColumn2'
DECLARE @xml AS XML
SET @xml = CAST(('<X>'+REPLACE(@MyColumnNamesInAList,',' ,'</X><X>')+'</X>') AS XML)
SELECT X.Column_Name 
FROM (SELECT N.value('.', 'varchar(10)') AS Column_Name FROM @xml.nodes('X') AS T(N))X 
EXCEPT 
(SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'tblTesttable')  

/ *

Column_Name
-----------
NewColumn1
NewColumn2

* /

  

更重要的是,如果没有相应的话,我必须插入NULL   xyz中的专栏。

现在我在这里给你一个提示(我希望你解决这个部分)(:

您需要发出

ALTER TABLE N'tblTesttable' ADD NewColumn1  VARCHAR(20) NULL
ALTER TABLE N'tblTesttable' ADD NewColumn2  VARCHAR(20) NULL

您需要动态构建查询并使用我们之前共享的内容。

希望你明白。

一切顺利!!!

答案 1 :(得分:0)

您应该直接在.NET程序中动态生成查询。

您可以使用系统视图和EXEC命令执行此操作,但在SQL Server上运行效果不佳。

如果您使用的值来自最终用户,请注意SQL注入。