其中这个动态语句哪里不对啊?
SET @sql=N'SELECT b.name FROM dbo.syscolumns a ,dbo.sysobjects b '+
N'WHERE a.id=b.id AND a.name= ' +char(39)+@ColumnName+char(39) +
N'AND b.name= ' +char(39)+@TableName+char(39)我print出来是这样的SELECT b.name FROM dbo.syscolumns a ,dbo.sysobjects b WHERE a.id=b.id AND a.name= 'ufts'AND b.name=
后面的没有了,为什么?
服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: '=' 附近有语法错误。
SET @sql=N'SELECT b.name FROM dbo.syscolumns a ,dbo.sysobjects b '+
N'WHERE a.id=b.id AND a.name= ' +char(39)+@ColumnName+char(39) +
N'AND b.name= ' +char(39)+@TableName+char(39)我print出来是这样的SELECT b.name FROM dbo.syscolumns a ,dbo.sysobjects b WHERE a.id=b.id AND a.name= 'ufts'AND b.name=
后面的没有了,为什么?
服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: '=' 附近有语法错误。
还有 这个@sql 也没有使用CREATE FUNCTION dbo.F_Pub_IfHaveColumn(
@TableName VARCHAR(50),
@ColumnName VARCHAR(50)
)
RETURNS INT
AS
BEGIN
DECLARE @s_Value VARCHAR(100),
@i_Value INT,
@sql NVARCHAR(500) SET @s_Value=null
SET @sql=N'SELECT '+@s_Value+'=b.name FROM dbo.syscolumns a ,dbo.sysobjects b '+
N'WHERE a.id=b.id AND a.name= ' +char(39)+@ColumnName+char(39) +
N'AND b.name= ' +char(39)+@TableName+char(39)
SET @i_Value=-1
If @@Error<>0
begin
If @s_Value is null
SET @i_Value=-1
else
SET @i_Value=0
end
else
RETURN -1
RETURN @i_Value
END
@TableName VARCHAR(50),
@ColumnName VARCHAR(50))
RETURNS INT
AS
BEGIN
DECLARE @s_Value VARCHAR(100),
@i_Value INT,
@sql NVARCHAR(500) SET @s_Value=null
SET @sql=N'SELECT '+@s_Value+'=b.name FROM dbo.syscolumns a ,dbo.sysobjects b '+
N'WHERE a.id=b.id AND a.name= ' +char(39)+@ColumnName+char(39) +
N'AND b.name= ' +char(39)+@TableName+char(39)
exec(@sql)--这里不是这样执行SQL吗? SET @i_Value=-1
If @@Error<>0
begin
If @s_Value is null
SET @i_Value=-1
else
SET @i_Value=0
end
else
RETURN -1 RETURN @i_Value
END服务器: 消息 443,级别 16,状态 2,过程 F_Pub_IfHaveColumn,行 28
在函数内不正确地使用了 'EXECUTE'。
RETURNS INT
AS
BEGIN
exec('select 1')
RETURN 1
END
另外你的功能好像是判断某表是否函数某列吧,可以这么写。
CREATE Function dbo.F_Pub_IfHaveColumn(
@TableName VARCHAR(50),
@ColumnName VARCHAR(50))
Returns Int --0为不存在,1为存在
AS
BEGIN
Declare @Result Int
If Exists(Select 1 from SysColumns Where Name=@ColumnName And ID=OBJECT_ID(@TableName))
Set @Result=1
Else
Set @Result=0
Return @Result
END
GO
select dbo.F_Pub_IfHaveColumn('CheckVouch','ufts') 结果是0,应该是1才对。因为这个表有ufts字段的是不是动态SQL的问题啊?应该怎么改?
你的SQL有问题,我改成这样就可以了
elect 1 from dbo.SysColumns a,dbo.sysobjects b Where a.id=b.id and a.Name=@ColumnName And b.name=@TableName结贴
Create Table TEST(
ID Int Identity,
subject Nvarchar(10),
keyword Nvarchar(100))
--插入数据
Insert Into TEST Values(N'信息主题1',N'电脑,电脑主机,联想电脑')
Insert Into TEST Values(N'信息主题2',N'电脑主机,联想电脑')
Insert Into TEST Values(N'信息主题3',N'显示器,三星显示器')
GO
--建立函数
CREATE Function dbo.F_Pub_IfHaveColumn(
@TableName VARCHAR(50),
@ColumnName VARCHAR(50))
Returns Int --0为不存在,1为存在
AS
BEGIN
Declare @Result Int
If Exists(Select 1 from SysColumns Where Name=@ColumnName And ID=OBJECT_ID(@TableName))
Set @Result=1
Else
Set @Result=0
Return @Result
END
GO
--测试
Select dbo.F_Pub_IfHaveColumn('TEST','subject')
GO
--删除测试环境
Drop Table TEST
Drop Function dbo.F_Pub_IfHaveColumn
GO
--结果
/*
1
*/