Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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
C# SQL查询返回SSMS中的值,DataTable中的值为DBNull_C#_Sql Server_Tsql_Ado.net - Fatal编程技术网

C# SQL查询返回SSMS中的值,DataTable中的值为DBNull

C# SQL查询返回SSMS中的值,DataTable中的值为DBNull,c#,sql-server,tsql,ado.net,C#,Sql Server,Tsql,Ado.net,我在SQLServerManagementStudio中创建了这个查询,以获取数据库中存储过程的定义 Select [definition], [uses_ansi_nulls], [uses_quoted_identifier], [is_schema_bound], [uses_database_collation], [is_recompiled], [null_on_null_input], [execute_as_principal_id], [uses_

我在SQLServerManagementStudio中创建了这个查询,以获取数据库中存储过程的定义

Select [definition], [uses_ansi_nulls], [uses_quoted_identifier], 
    [is_schema_bound], [uses_database_collation], [is_recompiled], 
    [null_on_null_input], [execute_as_principal_id], 
    [uses_native_compilation]
From [sys].[sql_modules]
Where [object_id] = @object_Id

在SSMS中,如果我声明@object\u Id int=请尝试从不同的sys表中进行选择。例如:

SELECT DISTINCT SCHEMA_NAME(o.schema_id),o.name,c.[text]
FROM syscomments AS c
INNER JOIN sys.objects AS o ON c.id = o.[object_id]
INNER JOIN sys.schemas AS s ON o.schema_id = s.schema_id
WHERE object_id = <your id>
另一个可能有助于您的查询:

SELECT so.[name],  m.[definition]
FROM sys.objects as so
inner join sys.sql_modules as m on m.object_id = so.object_id
WHERE so.[type] = 'P' AND so.object_id = <your id>;
这里m[定义]没有长度意味着它尽可能大。如果它将为同一SP返回多行,则需要向应用程序添加另一个循环并连接字符串


让我知道它是否有效。

事实证明@DaveBrown的答案是正确的:这是一个权限问题,尽管它的行为与我想象的不一样

我在查询中添加了LEN[definition]。我们的想法是,如果ADO.Net下拉24000个字符的存储过程定义时出现问题,我仍然会得到定义的字符数。如果它返回一个空值,那么它就是SQLServer中发生的事情

Select [definition], LEN([definition]) [definition_length], [uses_ansi_nulls], [uses_quoted_identifier], 
    [is_schema_bound], [uses_database_collation], [is_recompiled], 
    [null_on_null_input], [execute_as_principal_id], 
    [uses_native_compilation]
From [sys].[sql_modules]
Where [object_id] = @object_Id
当我停在一个断点时,LEN[definition]为空

事实证明,为了保护罪犯而保持匿名的人,在我们想要记录的环境中没有与她在初始环境中相同的权限。该代码在其中一个环境中工作,我对存储过程和其他模块具有编写权限


这最终归结为权限导致的意外行为。我希望SQL Server在尝试查询定义而不是返回null时会引发错误。

bigint不是int…@ZoharPeled感谢您的捕获,尽管它不会更改行为,因为它已本地化为SSMS。调试时,从dt.Rows.Count返回什么?Resources.Commands.GetDefinition的值是多少?这可能是权限问题,尽管我们不能确定这一点。请检查,在SSMS中运行该过程时,它没有返回定义的全文,缺少片段。如果过程较大,则可能返回两行,分别以SP开头和SP结尾。。。检查它是否在C代码中工作对于我的开发场景,我正在使用一个大的存储过程,超过450行,超过24000个字符,这是一个怪物。此查询返回7条记录,仅少于1800个字符。
SELECT so.[name],  m.[definition]
FROM sys.objects as so
inner join sys.sql_modules as m on m.object_id = so.object_id
WHERE so.[type] = 'P' AND so.object_id = <your id>;
Select [definition], LEN([definition]) [definition_length], [uses_ansi_nulls], [uses_quoted_identifier], 
    [is_schema_bound], [uses_database_collation], [is_recompiled], 
    [null_on_null_input], [execute_as_principal_id], 
    [uses_native_compilation]
From [sys].[sql_modules]
Where [object_id] = @object_Id