我有一个 (SQL Server) 表,其中包含 3 种类型的结果:FLOAT、NVARCHAR(30) 或 DATETIME(3 个单独的列)。我想确保对于任何给定的行,只有一列有结果,其他列是 NULL。实现这一目标的最简单的检查约束是什么?
这样做的背景是试图改进将非数字结果捕获到现有系统中的能力。使用约束向表中添加两个新列以防止每行超过一个结果是最经济的方法,但不一定是正确的方法。
更新:抱歉,数据类型混乱。可悲的是,我不打算将指示的结果类型解释为 SQL Server 数据类型,只是通用术语,现在已修复。
我有一个包含大约 3000 行的表,我需要修改列定义以允许空值。我有一个将执行更改的更改脚本,但我希望能够重新运行该脚本,以便仅在列定义尚未更改时才会发生更改。如何测试列定义以确定该列是 NULL 还是 NOT NULL?
我支持使用 CodeSmith 和 NetTiers 模板生成 C# 代码的应用程序。CodeSmith 检查数据库并使用SET FMTONLY ON设置来确定应为其生成代码的列。
不幸的是,在从 SQL Server 2005 迁移到 2012 的过程中,在某些特定情况下,这不再起作用。有一个在链接服务器上执行存储过程的存储过程,并且为该存储过程生成的代码不正确。
我已经设法将问题EXEC与SET FMTONLY ON. 以下(仅示例)SELECT适用于 2005 和 2012 实例:
SET FMTONLY ON
SELECT TOP(10) [MCMCU]
,[MCSTYL]
,[MCDC]
FROM [JDE].[JDE_CRP].[CRPDTA].[F0006]
SET FMTONLY OFF
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,这仅返回列标题。以下仅适用于 2005 实例:
SET FMTONLY ON
EXEC('SELECT TOP(10) [MCMCU]
,[MCSTYL]
,[MCDC]
FROM [JDE_CRP].[CRPDTA].[F0006]') AT [JDE]
SET FMTONLY OFF
Run Code Online (Sandbox Code Playgroud)
在 2012 实例上运行时,SSMS 显示消息“命令成功完成”,但不显示列标题。
有什么我在这里想念的吗?也许是我需要更改的设置?链接服务器定义是相同的,包括用于连接的身份。是的,我知道这FMTONLY已被弃用,但我无法更改 CodeSmith 询问数据库的方式。