动态sql中的单引号

时间:2013-09-30 12:08:12

标签: sql-server tsql dynamic-sql

这行代码有什么问题? SELECT
'IF(SELECT COLUMNPROPERTY('+ OBJECT_ID(''strong> [+ TABLE_SCHEMA +'']。['+ TABLE_NAME +]''+','+''U'')+',' +''COLUMN_NAME''+','+''AllowNull''+'))= 0'

我正在尝试编写列的可空性。这是脚本的一部分而不是整个脚本。这条线给了我很多时间。

1 个答案:

答案 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;

陈述的输出。

enter image description here

用户的更多示例:

-- 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 字段不允许空