sql命令产生在sql server中不为空的空结果

尼可·海根斯

因此,我正在尝试构建一个代码生成器,它将从数据库中提取索引并创建一个基于索引进行过滤的类。下面的代码适用于 SQL-server 并产生 2 条记录。但是我的 SqlDataReader 产生零记录。为 1 个带索引的表提供了示例。希望有人可以帮助我。

SQL服务器中的代码:

create table Agent(
    ID bigint constraint PK_Agent primary key identity(1,1),
    LastName nvarchar(50) not null,
    FirstName nvarchar(50) not null,
    index IN_Agent_Name nonclustered (LastName, FirstName)
)

select t.object_id, 
        s.name as schemaname, 
        t.name as tablename,  
        i.index_id,  
        i.name as indexname,  
        index_column_id,  
        c.name as columnname  
from sys.tables t 
inner join sys.schemas s on t.schema_id = s.schema_id 
inner join sys.indexes i on i.object_id = t.object_id 
inner join sys.index_columns ic on ic.object_id = t.object_id and ic.index_id = i.index_id 
inner join sys.columns c on c.object_id = t.object_id and ic.column_id = c.column_id 
where i.index_id > 0 
and i.type in (1, 2)  
and i.is_primary_key = 0  
and i.is_unique_constraint = 0  
and i.is_disabled = 0  
and i.is_hypothetical = 0  
and ic.key_ordinal > 0  
and t.name like 'Agent'  
and i.name like 'IN_Agent_Name'

VS 中的代码:


        public static TableIndex GetIndex(string indexName, string tableName)
        {
            TableIndex index = null;
            using (var conn = new SqlConnection("Server=localhost;Database=VenturaERD;User Id=VenturaDBUser;Password = Ventura;"))
            {
                conn.Open();
                var cmd = new SqlCommand("select t.object_id, s.name as schemaname, t.name as tablename, i.index_id, i.name as indexname, index_column_id, c.name as columnname from sys.tables t inner join sys.schemas s on t.schema_id = s.schema_id inner join sys.indexes i on i.object_id = t.object_id inner join sys.index_columns ic on ic.object_id = t.object_id and ic.index_id = i.index_id inner join sys.columns c on c.object_id = t.object_id and ic.column_id = c.column_id where i.index_id > 0 and i.type in (1, 2) and i.is_primary_key = 0 and i.is_unique_constraint = 0 and i.is_disabled = 0 and i.is_hypothetical = 0 and ic.key_ordinal > 0 and t.name like '" + tableName + "' and i.name like '" + indexName + "'")
                {
                    Connection = conn
                };
                using (var reader = cmd.ExecuteReader())
                {
                    if (reader.Read())
                    {
                        index = new TableIndex()
                        {
                            TableId = reader.GetInt32(reader.GetOrdinal("object_id")),
                            TableName = reader.GetString(reader.GetOrdinal("tablename")),
                            IndexId = reader.GetInt32(reader.GetOrdinal("index_id")),
                            IndexName = reader.GetString(reader.GetOrdinal("indexname")),
                            Columns = new List()
                            {
                                new IndexColumn()
                                {
                                    ColumnName = reader.GetString(reader.GetOrdinal("columnname")),
                                    Order=reader.GetInt32(reader.GetOrdinal("index_column_id"))
                                }
                            }
                        };
                        while (reader.Read())
                        {
                            index.Columns.Add(new IndexColumn()
                            {
                                ColumnName = reader.GetString(reader.GetOrdinal("columnname")),
                                Order = reader.GetInt32(reader.GetOrdinal("index_column_id"))
                            });
                        }
                    }
                    reader.Close();
                }
            }
            return index;
        }

请检查用户权限,我相信只有公共权限用户不会获得任何数据。

确保您使用 SQL management studio 连接的用户和连接字符串中的用户相同。

用户(至少在我的测试中)至少需要这个db_datareader角色。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在SQL Server中“不为空”和“ <>空”之间的区别?

来自分类Dev

在SQL中检查不为空?

来自分类Dev

SQL:不为空时在结果集中包含列

来自分类Dev

在SQL Server中是否有与ISNULL相反的功能?做不为空?

来自分类Dev

如果先前值不为空,则SQL Server更新值

来自分类Dev

SQL EXISTS与聚合不为空

来自分类Dev

在SQL中计数不为空

来自分类Dev

返回不为空或空SQL的varchar

来自分类Dev

Java + SQL Server:结果集为空?

来自分类Dev

SQL - 如果不为空,则选择不同表中的列

来自分类Dev

使用Dapper的Sql查询返回空结果,但分析器的请求结果不为空

来自分类Dev

从SQL查询中获取空结果

来自分类Dev

在同一结果中,GROUP BY中的COUNT个空值(SQL Server)

来自分类Dev

SQL空查询结果

来自分类Dev

如何在SQL Server的结果中包含空值的同时使用多个参数进行搜索

来自分类Dev

如何在SQL Server Service Broker RECEIVE中获取空结果集而不是等待事务结束?

来自分类Dev

返回不为null或为空SQL的varchar

来自分类Dev

显示不为空的php sql列

来自分类Dev

SQL CASE WHEN 参数不为空

来自分类Dev

检查SQL Server中三列中的空或空数据

来自分类Dev

SQL Server加法和减法防止空结果

来自分类Dev

调用 SQL Server 存储过程时结果为空

来自分类Dev

SQL Server 分组结果包含数字和空值

来自分类Dev

当返回查询不为空时,来自php的MS SQL Server过程失败,并显示500

来自分类Dev

获取日期不为空的上一条记录 - SQL SERVER

来自分类Dev

Tesseract OCR产生空结果

来自分类Dev

如果参数不为null或为空,则进行SQL更新

来自分类Dev

SQL查询是否不为空,则更新或保留相同数据

来自分类Dev

SQL查询是否不为空,则更新或保留相同数据

Related 相关文章

热门标签

归档