mar*_*c_s 5 sql-server-2008 sql-server stored-procedures
是有办法需要找出什么ANSI_NULLS
和ANSI_PADDING
等设置里,当一个给定的过程中我创建了数据库?
似乎我的客户有几个存储过程和一些已“调整”的触发器 - 但不幸的是,使用了这些数据库设置的“错误”集。我可以找出哪些procs 和触发器受到影响,还是需要使用正确的设置重新创建所有这些?
这可以通过以下方式确定sys.sql_modules
:
USE tempdb;
GO
SET ANSI_NULLS ON;
GO
CREATE PROCEDURE dbo.foo1 AS SELECT 1;
GO
SET ANSI_NULLS OFF;
GO
CREATE PROCEDURE dbo.foo2 AS SELECT 1;
GO
SELECT name = OBJECT_NAME([object_id]), uses_ansi_nulls
FROM sys.sql_modules
WHERE OBJECT_NAME([object_id]) IN (N'foo1', N'foo2');
GO
DROP PROCEDURE dbo.foo1, dbo.foo2;
Run Code Online (Sandbox Code Playgroud)
结果:
name uses_ansi_nulls
---- ---------------
foo1 1
foo2 0
Run Code Online (Sandbox Code Playgroud)
其他一些有用的列:
object_id
definition
uses_ansi_nulls
uses_quoted_identifier
is_schema_bound
uses_database_collation
is_recompiled
null_on_null_input
execute_as_principal_id
Run Code Online (Sandbox Code Playgroud)
请注意,某些设置(例如arithabort
、ansi_warnings
、ansi_padding
)不与对象一起存储。此外,您还需要使用正确设置重新编译程序,以针对已识别为“错误”的任何程序进行设置。
归档时间: |
|
查看次数: |
10088 次 |
最近记录: |