这行代码有什么问题?SELECT
'IF (SELECT COLUMNPROPERTY('+ OBJECT_ID('' [+ TABLE_SCHEMA +''].[ ' + TABLE_NAME +] ''+',' + ''U'')+',' +''COLUMN_NAME'' +','+ ''AllowsNull''+')) =0'
我正在尝试编写列的可空性脚本。这是脚本的一部分,而不是整个脚本。这条线让我很难过。
这行代码有什么问题?SELECT
'IF (SELECT COLUMNPROPERTY('+ OBJECT_ID('' [+ TABLE_SCHEMA +''].[ ' + TABLE_NAME +] ''+',' + ''U'')+',' +''COLUMN_NAME'' +','+ ''AllowsNull''+')) =0'
我正在尝试编写列的可空性脚本。这是脚本的一部分,而不是整个脚本。这条线让我很难过。
看起来您正在将无效参数传递给 columnproperty() 函数。
这是一个使用 Adventure Works 2012 数据库的带有和不带有动态 sql 的示例。
第一个示例返回表“ProductListPriceHistory”的所有列及其可为空性。
第二个示例创建动态 TSQL,只为同一表中的“EndDate”列返回一行。它将行存储在可以使用 IF 语句查询的表变量中。我喜欢在测试时查看所有相关数据;因此,我使用了一个表变量来存储关键数据。
我希望这能解决你的问题。
祝你好运。
约翰
-- Test database
use AdventureWorks2012
go
--
-- Non dynamic SQL
--
SELECT TABLE_NAME, COLUMN_NAME, COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA + '.' + TABLE_NAME), COLUMN_NAME, 'AllowsNull') AS AllowsNulls
FROM AdventureWorks2012.INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME = 'ProductListPriceHistory'
GO
--
-- Dynamic SQL
--
-- table variable
declare @var_table TABLE
(
TABLE_NAME varchar(256),
COLUMN_NAME varchar(256),
ALLOWS_NULLS int
);
-- tsql stmt
declare @var_tsql varchar(max) =
'USE AdventureWorks2012; ' +
' SELECT TABLE_NAME, COLUMN_NAME, COLUMNPROPERTY(OBJECT_ID(TABLE_SCHEMA + ''.'' + TABLE_NAME), COLUMN_NAME, ''AllowsNull'') AS ALLOWS_NULLS ' +
' FROM INFORMATION_SCHEMA.COLUMNS ' +
' WHERE TABLE_NAME = ''ProductListPriceHistory'' AND ' +
' COLUMN_NAME = ''EndDate'' ';
-- save to variable
insert into @var_table
exec (@var_tsql);
-- query the variable
select ALLOWS_NULLS from @var_table;
语句的输出。
更多用户示例:
-- tsql stmt
declare @var_tsql varchar(max) =
' IF (SELECT COLUMNPROPERTY(OBJECT_ID(''[Production].[ProductListPriceHistory]'',''U''), ''EndDate'', ''AllowsNull'')) = 1
PRINT ''Field allows null''
ELSE
PRINT ''Field does not allow null'' ';
-- run the statement
exec (@var_tsql);
-- tsql stmt
set @var_tsql =
' IF (SELECT COLUMNPROPERTY(OBJECT_ID(''[Production].[ProductListPriceHistory]'',''U''), ''ProductID'', ''AllowsNull'')) = 1
PRINT ''Field allows null''
ELSE
PRINT ''Field does not allow null'' ';
-- run the statement
exec (@var_tsql);
输出如下。
字段允许为空 字段不允许为空