我目前在用户定义的表格中指定的列中搜索值时遇到问题。我已经获得了我的.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;
}
答案 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注入。