这行代码有什么问题?
SELECT
'IF(SELECT COLUMNPROPERTY('+ OBJECT_ID(''strong> [+ TABLE_SCHEMA +'']。['+ TABLE_NAME +]''+','+''U'')+',' +''COLUMN_NAME''+','+''AllowNull''+'))= 0'
我正在尝试编写列的可空性。这是脚本的一部分而不是整个脚本。这条线给了我很多时间。
答案 0 :(得分: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);
输出如下。
字段允许null 字段不允许空